解释一下什么是堆和栈。
本帖最后由 破心 于 2015-5-12 18:20 编辑问题描述
编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?
在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?
它们的作用范围是什么?
它们的大小由什么决定?
哪个更快?
**** Hidden Message *****
译者注
关于堆栈的这个帖子,对我来说,收获非常多。我之前看过一些资料,自己写代码的时候也常常思考。就这方面,也和祥子(我的大学舍友,现在北京邮电读研,技术牛人)探讨过多次了。但是终究是一个一个的知识点,这个帖子看完之后,豁然开朗,把知识点终于连接成了一个网。这种感觉,经历过的一定懂得,期间的兴奋不言而喻。
这个帖子跟帖者不少,我选了评分最高的四个。这四个之间也有一些是重复的观点。个人钟爱第四个回答者,我看的时候,瞬间高潮了,有木有?不过需要一些汇编语言、操作系统、计算机组成原理的的基础,知道那几个寄存器是干什么的,要知道计算机的流水线指令工作机制,保护/恢复现场等概念。三个回复者都涉及到了操作系统中虚拟内存;在比较速度的时候,大家一定要在脑中对“局部性原理”和计算机高速缓存有一个概念。
如果你把这篇文章看懂了,我相信你收获的不只是堆和栈,你会理解的更多!
兴奋之余,有几点还是要强调的,翻译没有逐字逐词翻译,大部分是通过我个人的知识积累和对回帖者的意图揣测而来的。请大家不要咬文嚼字,逐个推敲,我们的目的在于技术交流,不是么?达到这一目的就够了。
下面是一些不确定点:
我没有听过 bookkeeping data 这种说法,故没有翻译。从上下文理解来看,可以想成是用来寄存器值?函数参数?返回地址?如果有了解具体含义的朋友,烦请告知。
栈和堆栈是一回事,英文表达是 stack,堆是 heap。
调用栈的概念,我是第一次听说,不太熟悉。大家可以去查查资料研究一下。
以上,送给大家,本文结束。
本来有一些图片的,能帮助大家更好的理解,不过不知道为什么,我图片和附件都不能上传,也就将就吧。 之前接触过一些,看看这里怎么讲的 好给力,必须了解下是堆和栈的含义,谢谢。 鼓励转载优秀文档 这个可以哦,还行 好好学一下 重新了解一下 路过,学习了,呵呵,多谢 支持原创 支持技术牛人。 学习下!!!!!!!