我想知道程序栈的确切内容。
分支操作是如何完成的?
使用gdb调试程序时,内存转储是什么意思?
它会给出程序栈吗?
TIA,Praveen
发布于 2010-06-22 13:09:26
C语言本身根本不强制使用堆栈--它定义的是行为而不是实现。
然而,在常见情况下,程序堆栈用于存储以下内容:
使用auto存储持续时间声明的
或当前函数结束后应恢复执行的位置被分配有编译器所需的非标准staticfunction;
中使用的alloca()的内务信息、可变长度数组的大小和中间值
这并不是一个详尽的列表-其他更奇特的东西,比如Trampolines,有时也会存储在堆栈中。通常,它是一个临时存储区,用于在当前函数返回给其调用方之后不再需要的工作项。
调试器中的“回溯”显示了堆栈的部分(但不是全部)内容。
发布于 2010-06-22 13:01:51
堆栈是一个内存区,其中包含子例程参数、局部变量和子例程的返回地址。
在许多体系结构上,包括Intel的体系结构,堆栈是自上而下增长的-这意味着每次将数据推入堆栈时,堆栈指针都会递减。
典型的函数调用序列如下所示:
<
要生成堆栈跟踪,运行时环境只需扫描堆栈以确定返回地址所指向的位置。我写的是“简单的”,但是如果基指针没有保存到堆栈中,事情就不那么简单了,因为除了当前堆栈框架之外,可能无法确定其他任何堆栈框架的位置。
发布于 2010-06-22 12:53:52
请参阅下面的链接,它可以让您更好地了解Variables and Memory
它在内存损坏之前提供堆栈跟踪happens.that堆栈跟踪是与传递的参数一起进行的一系列函数调用。
https://stackoverflow.com/questions/3090333
复制相似问题