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

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

         

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

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

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

??????

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

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

     

                                      

发布了10 篇原创文章 · 获赞 3 · 访问量 305

猜你喜欢

转载自blog.csdn.net/qq_32227619/article/details/104585771
今日推荐