程序内存栈为什么是从高地址往低地址分配内存的(小白_马)

最近在看书的时候发现程序内存栈是从高地址往低地址分配内存的,而其它的内存地址是从低到高分配内存。

 

         

 

首先,因为栈设计为后进先出的特性(栈需要存储函数中的局部变量和参数,函数又是最后调用的最先销毁,栈的后进先出正好满足这一点)。

其次,栈是连续分配内存的,如果给一个数组或对象分配内存,栈会选择还没分配的最小的内存地址给数组,在这个内存块中,数组中的元素从低地址到高地址依次分配(不要和栈的从高到低弄混了)。所以数组中第一个元素的其实地址对应于已分配栈的最低地址。

最后,栈只能获取栈顶的内存地址,所以如果栈是从高地址往低地址扩展的话,正好栈顶指向数组的起始地址,即数组的指针。而如果栈还采用从低地址到高地址扩展,那么不会指向数组的指针。

 

??????

疑问:为什么其他程序内存是从低地址到高地址扩展的?

因为其他程序内存地址不是连续分配的,有另外的指针指向其对象地址。

 

 

     

 

                                      

  • 25
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值