现在的位置: 首页 > 综合 > 正文

堆和栈的相向生长(整理转帖)

2012年12月23日 ⁄ 综合 ⁄ 共 348字 ⁄ 字号 评论关闭

    在没有MMU的时代,为了最大的利用内存空间,堆和栈被设计为从两端相向生长。那么哪一个向上,哪一个向下呢?
    人们对数据访问是习惯于向上的,比如你在堆中new一个数组,是习惯于把低元素放到低地址,把高位放到高地址,所以堆向上生长比较符合习惯。而栈则对方向 不敏感,一般对栈的操作只有push和pop,无所谓向上向下,所以就把堆放在了低端,把栈放在了高端。MMU出来后就无所谓了,只不过也没必要改了。
    51这种单片机,没有堆,只有栈,所以把栈设计成向上,有利于扩展,比如52在127后面加个128个字节,程序就不必修改可以直接移植,如果是向下的话要利用这多出来的128字节就要修改程序,改变堆栈指针了。
    ARM7TDMI架构没有MMU,就采用了标准的原始设计,堆向上生长,栈向下生长。

 

抱歉!评论已关闭.