破心 发表于 2015-5-12 18:14

解释一下什么是堆和栈。

本帖最后由 破心 于 2015-5-12 18:20 编辑

问题描述

编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?
在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?
它们的作用范围是什么?
它们的大小由什么决定?
哪个更快?

**** Hidden Message *****

译者注

关于堆栈的这个帖子,对我来说,收获非常多。我之前看过一些资料,自己写代码的时候也常常思考。就这方面,也和祥子(我的大学舍友,现在北京邮电读研,技术牛人)探讨过多次了。但是终究是一个一个的知识点,这个帖子看完之后,豁然开朗,把知识点终于连接成了一个网。这种感觉,经历过的一定懂得,期间的兴奋不言而喻。

这个帖子跟帖者不少,我选了评分最高的四个。这四个之间也有一些是重复的观点。个人钟爱第四个回答者,我看的时候,瞬间高潮了,有木有?不过需要一些汇编语言、操作系统、计算机组成原理的的基础,知道那几个寄存器是干什么的,要知道计算机的流水线指令工作机制,保护/恢复现场等概念。三个回复者都涉及到了操作系统中虚拟内存;在比较速度的时候,大家一定要在脑中对“局部性原理”和计算机高速缓存有一个概念。

如果你把这篇文章看懂了,我相信你收获的不只是堆和栈,你会理解的更多!

兴奋之余,有几点还是要强调的,翻译没有逐字逐词翻译,大部分是通过我个人的知识积累和对回帖者的意图揣测而来的。请大家不要咬文嚼字,逐个推敲,我们的目的在于技术交流,不是么?达到这一目的就够了。

下面是一些不确定点:
我没有听过 bookkeeping data 这种说法,故没有翻译。从上下文理解来看,可以想成是用来寄存器值?函数参数?返回地址?如果有了解具体含义的朋友,烦请告知。
栈和堆栈是一回事,英文表达是 stack,堆是 heap。
调用栈的概念,我是第一次听说,不太熟悉。大家可以去查查资料研究一下。

以上,送给大家,本文结束。

本来有一些图片的,能帮助大家更好的理解,不过不知道为什么,我图片和附件都不能上传,也就将就吧。

yuzhiboqianyuan 发表于 2015-5-12 22:51

之前接触过一些,看看这里怎么讲的

逍遥枷锁 发表于 2015-5-12 23:11

好给力,必须了解下是堆和栈的含义,谢谢。

可爱的宝贝 发表于 2015-5-12 23:40

鼓励转载优秀文档

bycye 发表于 2015-5-13 00:39

这个可以哦,还行

hhbb979 发表于 2015-5-13 07:27

好好学一下

fy88 发表于 2015-5-13 08:58

重新了解一下

xinzaixin 发表于 2015-5-13 09:34

路过,学习了,呵呵,多谢

大手温暖 发表于 2015-5-13 17:51

支持原创 支持技术牛人。

king38492378 发表于 2015-5-13 18:38

学习下!!!!!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 解释一下什么是堆和栈。