本文主要是介绍栈与调用惯例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
进程内存布局
每个进程分配的内存由很多部分组成,通常称为“段”。
1.文本段:包含了进程运行的程序二进制机器语言指令,只读,可共享,因为多个进程可同时运行同一程序;
2.初始化数据段:包含显式初始化的全局变量和静态变量;
3.未初始化数据段:也称为BSS段,包含未进行显示初始化的全局变量和静态变量。为什么分开放呢?主要原因在于程序在磁盘上存储时,没有必要为未经初始化的变量分配存储空间,相反可执行文件只需记录未初始化数据段的位置及所需大小,直到运行时再由程序加载器来分配这一空间。
4.栈段:动态增长和收缩的段,由栈帧组成,系统会为每个当前调用的函数分配一个栈帧,存储函数的局部变量、实参和返回值。动态存储函数之间的关系,以保证被调用函数在返回时恢复到母函数继续执行
5.堆:可在运行时为变量动态进行内存分配的一块区域,并在用完之后归还给堆区。
32位计算机限制了虚拟地址空间为4GB的大小。
栈与系统栈
栈在内存中的存放是高地址是栈底,低地址是栈顶。
内存的栈区实际上指的就是系统栈,系统栈由系统自动维护,它用于实现高级语言中函数的调用。对于类似C语言这样的高级语言,系统
这篇关于栈与调用惯例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!