栈和堆的理解

内存存储数据

程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址
起始地址是较小的那个地址,结束地址是较大的那个地址。

堆(heap)
        
        从低位到高位分配占据内存空间
        用户通过动态的内存占用请求(如malloc命令,新建对象)
        必须手动释放或通过垃圾回收机制来回收(不会自动消失)
        先进先出
        

栈(stack)
        
        除了heap以外,其他的内存占用叫做栈
        stack是由于函数运行而临时占用的内存区域
        从高位到低位占据内存空间
        后进先出

关于堆的具体解释(个人理解):
执行函数时,会在内存建立一个帧,函数中如果包含函数,则继续建立,执行完后,帧被回收,回到中断执行的地方        继续往下执行。通过这种机制,就实现了函数的层层调用,并且每一层都能使用自己的本地变量,

所有的帧都存放在 Stack,由于帧是一层层叠加的,所以 Stack 叫做栈。生成新的帧,叫做"入栈",英文是 push;栈的回收叫做"出栈",英文是 pop。Stack 的特点就是,最晚入栈的帧最早出栈(因为最内层的函数调用,最先结束运行),这就叫做"后进先出"的数据结构。每一次函数执行结束,就自动释放一个帧,所有函数执行结束,整个 Stack 就都释放了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值