一. call stack基本概念
在计算机程序中,call stack 和 heap 是两个重要的概念,它们被用来管理程序的运行状态和数据。
call stack 是一个栈结构,用来存储程序中的函数调用信息。每当一个函数被调用时,它会将函数调用信息(如函数名、参数值等)压入 call stack 中;每当一个函数返回时,它会将函数调用信息弹出 call stack。用谷歌浏览器展示下调用返回的过程:
调用函数C,函数C先入栈;
函数C调用函数B, 函数B入栈顶。以此类推。
接下来函数A返回值为1,并且最后入栈的函数A从栈顶pop出来。以此类推,最后返回值为3.
二 . heap基本概念
heap 是一个存储空间,用来存储程序中的动态分配的数据。每当程序中有新的数据需要分配空间时,它会从 heap 中分配空间;每当程序中有数据不再使用时,它会将这部分空间释放回 heap。我们在学习C++,java等语言时,一般都会采用关键字new来申请heap空间。
因此,call stack 和 heap 在程序中扮演着不同的角色。call stack 用来管理函数调用信息,支持程序的运行状态;heap 用来管理动态分配的数据,支持程序的数据存储。
三. 函数体内的局部变量是存储在call stack还是heap上
在函数体内的局部变量通常是存储在 call stack 上的。
当函数被调用时,它会创建一个新的函数栈帧,用来存储函数的运行状态和局部变量。这些局部变量通常是存储在 call stack 上的,在函数调用结束后,它们会被销毁。
但是,如果函数体内有一个变量是一个比较大的对象(例如,一个数组、一个长度较长的字符串、一个类实例),那么这个变量的值可能会存存储在 heap 上。