如何正确理解call stack 和heap

一. 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 上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值