免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11886 | 回复: 23
打印 上一主题 下一主题

请问堆(heap)和堆栈(stack)有什么区别???????????? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 03:09 |只看该作者 |倒序浏览
请问堆(heap)和堆栈(stack)有什么区别????????????

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-01-05 09:03 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

简单的可以理解为:
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。

论坛徽章:
0
3 [报告]
发表于 2005-01-05 09:06 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

heap:  例如malloc 与new出来的东西用指针指向了它,所指的地方就是heap
stack: 就是我们平时所说的局部变量

论坛徽章:
0
4 [报告]
发表于 2005-01-05 13:11 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

我看了一些这个方面的文章说:频繁的用heap会产生内存碎片,这个内存碎片又是什么东西!!!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-01-05 13:19 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

[quote]原帖由 "donee"]我看了一些这个方面的文章说:频繁的用heap会产生内存碎片,这个内存碎片又是什么东西!!!![/quote 发表:


没事,放心的用吧。那个是OS的事情。任何OS都只能避免内存碎片的出现,但几乎是不可能阻止的。

我理解是这样的:
1、你申请了一个4长度的内存。
2、你又申请了一个5长度的内存。
3、你释放了1申请的4长度的内存。
4、你申请>;4长度的内存。因为>;4,所以不会分配给前面的4个长度中的内存,那4个长度的内存就可以说是内存碎片。

OS的各种内存调度算法可以在不同程度上避免内存碎片的出现,但是都不可能阻止。优秀的程序员,会巧妙的安排程序的空间,尽量避免内存碎片的出现。

一般的情况是,不用考虑,专注考虑自己的程序就好了。

论坛徽章:
0
6 [报告]
发表于 2005-01-05 13:52 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

按照堆栈的先入后出原则,即先申请的后释放原则可以有效地避免在堆中产生碎片,这是程序员应当注意的。

论坛徽章:
0
7 [报告]
发表于 2005-01-06 13:17 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

呵呵,再罗嗦一句
堆栈区中的局部数据占有的空间在函数结束后会自动释放,而堆中的要由我们手动释放。另外堆栈中空间的分配一般在编译时就知道大小了,而如果要在运行时分配空间,就要使用堆了

论坛徽章:
0
8 [报告]
发表于 2005-01-06 15:01 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

stack在编译的时候就由编译器指定了大小,所以在使用大量内存的时候,最好不要在stack中申请,容易(栈)空间不足导致程序运行中产生非常奇怪的错误,特别是多线程的程序。

说错了,为了不误导后面来的同学,更正一下:),谢谢楼下的

论坛徽章:
0
9 [报告]
发表于 2005-01-06 15:06 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

[quote]原帖由 "cellar"]堆在编译的时候就由编译器指定了大小,所以在使用大量内存的时候,最好不要在堆中申请,容易(堆)空间不足导致程序运行中产生非常奇怪的错误,特别是多线程的程序。[/quote 发表:


应该是栈是编译指定的吧(如果2选1正确的话),堆是运行是自由分配的。

论坛徽章:
0
10 [报告]
发表于 2005-01-06 16:19 |只看该作者

请问堆(heap)和堆栈(stack)有什么区别????????????

呵呵,脑子是那么想的,嘴就说反了,不好意思,楼上更正的极是:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP