进程中的堆栈向下增长的原因
来源:互联网 发布:中级程序员报名 编辑:程序博客网 时间:2024/05/23 02:07
我们都知道X86系统进程中堆栈都向下增长的,那为什么是向下增长呢?
“这个问题与虚拟地址空间的分配规则有关,每一个可执行C程序,从低地址到高地址依次是:text,data,bss,堆,栈,环境参数变量;其中堆和栈之间有很大的地址空间空闲着,在需要分配空间的时候,堆向上涨,栈往下涨。”
这样设计可以使得堆和栈能够充分利用空闲的地址空间。如果栈向上涨的话,我们就必须得指定栈和堆的一个严格分界线,但这个分界线怎么确定呢?平均分?但是有的程序使用的堆空间比较多,而有的程序使用的栈空间比较多。所以就可能出现这种情况:一个程序因为栈溢出而崩溃的时候,其实它还有大量闲置的堆空间呢,但是我们却无法使用这些闲置的堆空间。所以呢,最好的办法就是让堆和栈一个向上涨,一个向下涨,这样它们就可以最大程度地共用这块剩余的地址空间,达到利用率的最大化!!
呵呵,其实当你明白这个原理的时候,你也会不由地惊叹当时设计计算机的那些科学家惊人的聪明和智慧!!
http://www.cnblogs.com/encode/p/3343499.html
51的栈是向高地址增长,INTEL的8031、8032、8048、8051系列使用向高地址增长的堆栈;但同样是INTEL,在x86系列中全部使用向低地址增长的堆栈。其他公司的CPU中除ARM的结构提供向高地址增长的堆栈选项外,多数都是使用向低地址增长的堆栈。
在没有MMU的时代,为了最大的利用内存空间,堆和栈被设计为从两端相向生长。那么哪一个向上,哪一个向下呢?
人们对数据访问是习惯于向上的,比如你在堆中new一个数组,是习惯于把低元素放到低地址,把高位放到高地址,所以堆向上生长比较符合习惯。而栈则对方向不敏感,一般对栈的操作只有PUSH和pop,无所谓向上向下,所以就把堆放在了低端,把栈放在了高端。MMU出来后就无所谓了,只不过也没必要改了
- 进程中的堆栈向下增长的原因
- 进程中堆栈向下增长的原因
- 堆栈向上增长和向下增长的深入理解
- 堆栈的增长方向
- 【汇编】代码段、数据段、堆栈段及向上增长和向下增长
- 【汇编】代码段、数据段、堆栈段及向上增长和向下增长
- 确定堆栈的增长方向
- arm堆栈的增长方式
- arm堆栈的增长方式
- arm堆栈的增长方向
- arm堆栈的增长方式
- 堆栈溢出的原因
- 堆栈溢出的原因
- 堆栈溢出的原因
- 堆栈的区别 及 增长方向
- 堆栈的区别及增长方向
- 获得堆栈增长方向的一种方法
- 获得堆栈增长方向的一种方法
- HDU_1998_奇数阶魔方【规律题】
- H5EDU 学员swiper项目实战
- 五大常用算法啊:贪心算法
- 【1】Android开发常用第三方库
- Shader 固定管线详解二
- 进程中的堆栈向下增长的原因
- 【GDOI2017第二轮模拟day1】公路建设
- (观点)作为程序员的你,会选择奋斗在一线城市还是回归故乡发展?
- 最简单的css+js标签页效果制作
- PAT乙级(Basic Level)练习题 >蜜蜂寻路
- Android(4)Activity总结之二
- 将网页转换成pdf文档的方法
- 移动信号(树形Dp)
- Android 四大天王-- 三个