什么是堆?什么是栈?他们之间有什么区别和联系?
的有关信息介绍如下:
我自己也是傻傻分不清,所以必须想一些歪门邪道老帮助我的记忆.
比较形象的比较是通过有道词典的这两张图来做比较,然后展开联想.
区别一(who):
1.堆:图片为土堆,一堆土.堆上面的是程序员负责分配和负责释放的.而程序员又称作码农,农民不就是挖土的吗,活该不能智能的处理,只能农民(码农)手动处理.
2.栈:图片为书,读书人,有知识有文化,什么都是自动的,高科技.所以栈是不用我们关心的,是操作系统自己去申请和释放的.另一种记忆方法:栈是什么?客栈的栈,供旅客住宿的地方。计算机领域指数据暂时存储的地方,所以才有进栈、出栈的说法。你去客栈还需要自己打扫吗?不需要,所以对旅客来说不用自己去开辟,不用自己去申请和释放。只要给钱就行了。
区别二(where):
1.堆:因为是土堆,农业相关的词汇,农业就感觉比较传统,没有那么智能化,所以分配的时候会去查找合适的空间.另外,我们可以想象这样一个场景:在悬崖边的栈道(形似链表)上面放一堆土堆,那肯定是会全部漏下去的, 但是计算机相反,计算机内部偏偏不信邪,就要这么搞, 所以这里联想到栈道来分配堆的.即:堆的分配会在栈道(链表)上去找,找到能放下堆的容量的内存块的时候就分配给你.
2.栈:栈人家是书,是很智能化的,所以操作系统会直接给你了.
区别三(how):
1.堆:图片是土堆,所以只能够从地上网上堆,不可能相反,那样的土堆除非有502.所以是从下往上分配地址的.
2.栈:图为书,我们可以想像成一个未来的图书馆,图书馆都是把书放在天花板上面,从上往下放,而且不会掉下来.所以栈的分配是自顶向下的,而且肯定有空间限制.所以如果栈上空间不足了就overflow了.
区别四(result):
1.堆:图片是土堆,农业相关,所以什么都比较慢,所以分配就比较慢了,而且到处都是小土堆,这就是碎片.
2.栈:图片是书,高科技的,当然分配就很快,至少比堆块.而且不会有碎片,人家是高科技嘛.



