栈帧

Posted ~千里之行,始于足下~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈帧相关的知识,希望对你有一定的参考价值。

今天了解了一个新的知识点:栈帧,下面对它做一个简单的介绍。C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。

在这里插入图片描述
当我们定义一个变量或函数时,c语言会在指定区域开辟内存空间,如定义一个静态变量会在静态变量区开辟空间,定义一个全局变量会在全局变量去开辟空间等。c语言中调用函数时会在栈区相应的开辟一个栈帧,而操作系统会根据函数内的变量决定栈帧的空间大小(主函数也不例外)。
以下是变量与数组在栈中的地址:
栈的地址开辟是从高往低的,堆的地址是从低往高的,与栈相反。
在这里插入图片描述

int a;
int b;
int c;

如上我们定义了三个变量,它们的地址是a > b > c(即递减的),在每一个变量中,a有四个字节,但它的首字节在该变量最下边,第四个字节在该变量的最上边;
在这里插入图片描述

int arr[10];

如上我定义了一个长度为10的整形数组,它的首元素的地址在最下边,最后一个元素的地址在该数组的最上边,数组中每一个变量中字节的位置同上(数组中地址是连续递增的,因为数组中开辟空间是整体开辟的);

总结:初次学习栈帧,总结的不全面,后期会继续修改,欢迎指正,感谢!

以上是关于栈帧的主要内容,如果未能解决你的问题,请参考以下文章

一段程序,认识栈帧

栈帧java中用啥表示

函数栈帧问题

函数栈帧 详解

函数栈帧 详解

程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址