c - C中程序堆栈的确切内容是什么?

标签 c gdb stack

我想知道程序堆栈的确切内容。

分支操作是如何完成的?

使用 gdb 调试程序时内存转储是什么意思?

它是否提供程序堆栈?

TIA, 普拉文

最佳答案

C 语言本身根本不强制使用堆栈 - 它定义行为而不是实现。

然而,在一般情况下,程序栈用于存储几样东西:

  • auto 存储持续时间声明的对象(即普通的、非static 局部变量);
  • 函数参数;
  • 返回地址(代码中在 return; 或到达当前函数末尾后应继续执行的位置);
  • 使用非标准 alloca() 函数分配的内存;
  • 编译器所需的临时值,例如寄存器的保存内容、alloca() 的内部管理信息、可变长度数组的大小和计算中使用的中间值。

这不是一个详尽的列表 - 其他更奇特的东西,如 Trampolines有时也存储在堆栈中。一般而言,它是工作项的临时存储区,用于在当前函数返回其调用者后不再需要的工作项。

调试器中的“回溯”显示堆栈的一些(但不是全部)内容。

关于c - C中程序堆栈的确切内容是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090333/

相关文章:

使用 atoi/sprintf 将整数转换为字符串

c++ - gdb os x sierra 10.12.3 不工作

谁能解释一下这个简短的 C 操作的输出吗?

c++ - 奇怪的 C 堆栈内存覆盖

c++ - 如何正确测试我的后缀表达式是否有效?

c++ - C++中的堆栈模拟

javascript - 解释这个 javascript 函数是如何工作的(在 Douglas Crockford 'How Javascript Works' 中找到)

c - gnome-builder 找不到我的空地文件

objective-c - 跳出 switch 语句

C 数组,向右移动元素未按预期工作