解释一下“堆栈”为什么连起来读
2013-08-22 07:22
357 查看
堆和栈明明就是两个不同的东西,但是总有人喜欢用“堆栈”这个词,甚至一些大学教授也用。本着钻牛角尖的态度,本人在网上查了一下这个词来源及用法,现总结如下:
1.“ 堆栈”这个词的诞生是历史原因:DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段开辟的同一块内存地址,栈从下往上增长,堆从上向下分配,中间没有规定分界线,所以程序控制不当,如深层次的递归,大量的动态地址分配很容易造成堆栈冲突,即堆栈地址重叠,从而造成死机和程序运行异常。堆和栈连在一起说的原因就是如此。
至于远堆则是指在数据段和代码段以外计算机所有没有使用的剩余基本内存。
补充:DOS下堆栈的分配是由程序而不是操作系统自己控制的,具体分配大小、方式随编译系统、程序模式不同而异。C语言的堆栈分配代码在启动代码中.(来自CSDN的maozefa)
2.一些学艺不精的误用了“堆栈”这个词来指代“栈”(来自CSDN的jixingzhong)。
所以有的时候“堆栈”其实指的是“栈”,至于具体指的是“栈”还是“堆和栈”要根据语境来看
1.“ 堆栈”这个词的诞生是历史原因:DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段开辟的同一块内存地址,栈从下往上增长,堆从上向下分配,中间没有规定分界线,所以程序控制不当,如深层次的递归,大量的动态地址分配很容易造成堆栈冲突,即堆栈地址重叠,从而造成死机和程序运行异常。堆和栈连在一起说的原因就是如此。
至于远堆则是指在数据段和代码段以外计算机所有没有使用的剩余基本内存。
补充:DOS下堆栈的分配是由程序而不是操作系统自己控制的,具体分配大小、方式随编译系统、程序模式不同而异。C语言的堆栈分配代码在启动代码中.(来自CSDN的maozefa)
2.一些学艺不精的误用了“堆栈”这个词来指代“栈”(来自CSDN的jixingzhong)。
所以有的时候“堆栈”其实指的是“栈”,至于具体指的是“栈”还是“堆和栈”要根据语境来看
相关文章推荐
- 请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式?
- 为什么要使用堆栈? sp和fp的解释
- 关于为什么会有偏移一说,粗略解释一下...
- 关于strcpy的问题,解释一下为什么VS中标准的方法不用memcpy实现
- 解释一下为什么数据文件最好采用单字符作为字段分隔符
- 关于为什么会有偏移一说,粗略解释一下...
- 当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。
- <实训|第十天>从底层解释一下U盘内存为什么变小的原因附数据恢复的基本原理
- 一件很诡异的事情,不懂为什么,大家帮忙解释一下给偶这菜鸟知道一下...
- 为什么房子要坐南朝北,用地理的知识解释一下
- 谁能解释一下,为什么VC++会报错?
- 很奇怪的bootclasspath参数 同文章里说的一样,也没有搞清楚 为什么需要显式地指定一下-bootclasspath
- 有没有大神能够逐行解释一下代码?Delphi
- 解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程~
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- Oracle数据库连接Eclipse的实例(解释为什么有时候明明在数据库里插入了数据却读不出来)
- 解释一下关系数据库的第一第二第三范式? - 知乎
- 探讨一下:为什么中国做了这么多年的软件,还是烂!不但自己做不行,软件外包也比印度差远了
- 下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的
- 通俗易懂地解释一下C#中的事件和委托