我想知道程序堆栈的确切内容。
分支操作是如何完成的?
使用 gdb 调试程序时内存转储是什么意思?
它是否提供程序堆栈?
TIA, 普拉文
最佳答案
C 语言本身根本不强制使用堆栈 - 它定义行为而不是实现。
然而,在一般情况下,程序栈用于存储几样东西:
- 用
auto
存储持续时间声明的对象(即普通的、非static
局部变量); - 函数参数;
- 返回地址(代码中在
return;
或到达当前函数末尾后应继续执行的位置); - 使用非标准
alloca()
函数分配的内存; - 编译器所需的临时值,例如寄存器的保存内容、
alloca()
的内部管理信息、可变长度数组的大小和计算中使用的中间值。
这不是一个详尽的列表 - 其他更奇特的东西,如 Trampolines有时也存储在堆栈中。一般而言,它是工作项的临时存储区,用于在当前函数返回其调用者后不再需要的工作项。
调试器中的“回溯”显示堆栈的一些(但不是全部)内容。
关于c - C中程序堆栈的确切内容是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090333/