首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中,程序栈的确切内容是什么?

在C中,程序栈的确切内容是什么?
EN

Stack Overflow用户
提问于 2010-06-22 12:44:06
回答 3查看 265关注 0票数 1

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

分支操作是如何完成的?

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

它会给出程序栈吗?

TIA,Praveen

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-22 13:09:26

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

然而,在常见情况下,程序堆栈用于存储以下内容:

使用auto存储持续时间声明的

  • 对象(即普通的、非variables);
  • Function parameters;
  • The的本地function;
  • Temporary返回地址(代码中在calculations.

或当前函数结束后应恢复执行的位置被分配有编译器所需的非标准staticfunction;

  • Temporary值,例如已保存的寄存器内容、calculations.

中使用的alloca()的内务信息、可变长度数组的大小和中间值

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-06-22 13:01:51

堆栈是一个内存区,其中包含子例程参数、局部变量和子例程的返回地址。

在许多体系结构上,包括Intel的体系结构,堆栈是自上而下增长的-这意味着每次将数据推入堆栈时,堆栈指针都会递减。

典型的函数调用序列如下所示:

  • 将参数推入跳转到子例程(这会将返回地址推送到堆栈)
  • 在某些语言(例如,Pascal)中基指针被推送到堆栈。
  • 被调用的子例程在堆栈上为其局部变量分配空间。

<

  • >F29>

要生成堆栈跟踪,运行时环境只需扫描堆栈以确定返回地址所指向的位置。我写的是“简单的”,但是如果基指针没有保存到堆栈中,事情就不那么简单了,因为除了当前堆栈框架之外,可能无法确定其他任何堆栈框架的位置。

票数 2
EN

Stack Overflow用户

发布于 2010-06-22 12:53:52

请参阅下面的链接,它可以让您更好地了解Variables and Memory

它在内存损坏之前提供堆栈跟踪happens.that堆栈跟踪是与传递的参数一起进行的一系列函数调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3090333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档