最近在看书的时候发现程序内存栈是从高地址往低地址分配内存的,而其它的内存地址是从低到高分配内存。
首先,因为栈设计为后进先出的特性(栈需要存储函数中的局部变量和参数,函数又是最后调用的最先销毁,栈的后进先出正好满足这一点)。
其次,栈是连续分配内存的,如果给一个数组或对象分配内存,栈会选择还没分配的最小的内存地址给数组,在这个内存块中,数组中的元素从低地址到高地址依次分配(不要和栈的从高到低弄混了)。所以数组中第一个元素的其实地址对应于已分配栈的最低地址。
最后,栈只能获取栈顶的内存地址,所以如果栈是从高地址往低地址扩展的话,正好栈顶指向数组的起始地址,即数组的指针。而如果栈还采用从低地址到高地址扩展,那么不会指向数组的指针。
??????
疑问:为什么其他程序内存是从低地址到高地址扩展的?
因为其他程序内存地址不是连续分配的,有另外的指针指向其对象地址。