Linux 程序运行栈帧
来源:互联网 发布:淘宝代购没有中文标签 编辑:程序博客网 时间:2024/05/29 08:49
我们知道C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现函数调用的一种数据结构。那么在Linux下gcc编译器栈帧是怎么实现的呢?
首先先来看一段程序:
猜猜程序运行的结果是什么?你会发现你的系统会立马重启。这是为什么呢,这就是程序运行的堆栈在作怪!!
下边这张图会让你很清楚的理解
分析:
1、首先函数在传参的时候使用的是值传递,在fun1中使用的参数并不是真正的参数,而是临时拷贝。
2、p得到参数a的地址,并且--得到call指令的下一条指令,p=fun()使得当前函数运行完成之后就,运行fun()函数。
那么现在再来看一看如何通过不使用b变量,来改变它的值
运行结果:
就这样讲b变量的值改变
有什么不足之处,希望大家批评指正
0 0
- Linux 程序运行栈帧
- linux程序运行分析
- linux 后台运行程序
- linux程序自动运行
- linux程序后台运行
- Linux 后台运行程序
- linux后台运行程序
- linux程序后台运行
- linux运行java程序
- Linux后台运行程序
- linux后台运行程序
- linux后台运行程序
- linux 程序后台运行
- Linux后台运行程序
- 程序运行 栈帧分析
- linux 获取程序运行的运行路径
- Linux中定期运行程序
- linux启动自动运行程序
- 单总线和多总线的区别
- VS2005编译器自定义宏__FILE__,__LINE__,__TIME__
- 添加ES6的支持
- C++函数返回引用的情况说明
- Java基础知识
- Linux 程序运行栈帧
- Json字符串的处理
- UEFI和Legacy及UEFI+Legacy启动的区别
- word怎么使用crtl+d删除一行
- 深入理解计算机中的 csapp,h和csapp.c
- 数字的推理
- 陶哲轩实分析-第17章 多元微分学
- 四大组件之一 --Services介绍和使用
- RecyclerView完全解析