ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C语言函数栈帧的创建与销毁

2026/9/12 21:42:14 拓冰建站 浏览量
C语言函数栈帧的创建与销毁

前言:

前期学习的时候,我们可能有很多困惑。

比如:

  • 局部变量是怎么创建的?
  • 为什么局部变量的值是随机值?
  • 函数是怎么传参是?传参的顺序是怎样的?
  • 形参和实参是什么关系?
  • 函数调用是怎么做的?
  • 函数调用结束后怎么返回的?

知道函数栈帧的创建和销毁后,上面的问题即迎刃而解,接下来让我们学习函数栈帧的创建和销毁吧

tip:差异性 

函数栈帧由于编译器不同,可能会有一些细微的差异,但整体逻辑是一样的

esp 和 ebp 两个寄存器

每一个函数调用,都要在栈区创建一个空间,ebp是栈底指针,esp是栈顶指针 

main函数被谁调用?

在VS2013中,main函数也是被其他函数调用的,调用顺序如下:

调用顺序:

因此,每次调用函数后,都会在栈区开辟一块空间,由高地址到低地址的顺序就是

mainCRTtartup -> __tmainCRTtartup -> main -> Add

局部变量如何创建?

在一个函数中开辟栈帧,并且将内容先全部变成随机值,接着这些局部变量在函数栈帧中找到一些空间进行存储,如果局部变量没有初始化,那么就会默认为刚才设置的随机值。

这也就解释了如果局部变量没有初始化,那么就是随机值