主题:堆溢出与栈溢出的区别是什么?
liukai19871216
[专家分:30] 发布于 2006-08-17 19:46:00
求助?
回复列表 (共8个回复)
沙发
euc [专家分:4310] 发布于 2006-08-18 11:32:00
什么是堆和栈?
如果你学过汇编的话应该知道,栈大小是在exe文件中就定好了的,是固定的.栈仅用来在调用函数时保存参数值.
堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. 想要从堆中挖到一块内存来用需要操作系统的帮助. new,malloc()都是在堆中分配内存,但是堆分配是很慢的. 有几个原因,os需要维护一个链表,而且同一时刻只能有一个线程操作堆...
参考:
http://www.chinaunix.net/jh/23/477573.html
http://www.chinaitpower.com/A/2004-03-31/159398.html
板凳
rickone [专家分:15390] 发布于 2006-08-18 14:11:00
[quote]堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. [/quote]
想要多大就有多大,我不同意啊,我的置换表开个几MB出来都失败了,我也不知道具体原因,它就是返回了0,我打算用文件缓冲~
3 楼
euc [专家分:4310] 发布于 2006-08-18 17:51:00
那可能是因为内存碎片的原因,如果一次得不到足够的内存,可以多分配几次.
4 楼
rickone [专家分:15390] 发布于 2006-08-19 14:10:00
我也这么想,可能还跟操作系统有关吧,不知道他怎么回收的,如果没有连续的空闲空间就失败了,我想可以先建一个文件,然后做内存映象,会不会跟在内存中一样快呢?反正现在的虚存技术对程序员是透明的,或许是一样快的。
5 楼
euc [专家分:4310] 发布于 2006-08-19 19:26:00
怎么可能透明?
6 楼
mantiser [专家分:300] 发布于 2006-08-21 23:10:00
堆和栈往往在一片内存块内,分配堆内存是从低地址往高地址扩展,栈内存是从高地址往低地址扩展(两端向中间靠近,由于这块内存很大,很少出现碰头现象)
7 楼
woshichounanwopa [专家分:320] 发布于 2006-08-22 16:59:00
我用的数据结构教材上没有讲堆,就只是讲了堆排序。是 胡学刚 写的是不是不好?
8 楼
InitInstance [专家分:8720] 发布于 2006-08-28 11:22:00
堆排序跟堆栈的堆是两码事
我来回复