回 帖 发 新 帖 刷新版面

主题:堆溢出与栈溢出的区别是什么?

求助?

回复列表 (共8个回复)

沙发

什么是堆和栈?
如果你学过汇编的话应该知道,栈大小是在exe文件中就定好了的,是固定的.栈仅用来在调用函数时保存参数值.

堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. 想要从堆中挖到一块内存来用需要操作系统的帮助. new,malloc()都是在堆中分配内存,但是堆分配是很慢的. 有几个原因,os需要维护一个链表,而且同一时刻只能有一个线程操作堆...

参考:
http://www.chinaunix.net/jh/23/477573.html
http://www.chinaitpower.com/A/2004-03-31/159398.html

板凳

[quote]堆是我们编程序时想要动态获得内存的地方,大小是任意的,可以说堆想要多大就有多大. [/quote]
想要多大就有多大,我不同意啊,我的置换表开个几MB出来都失败了,我也不知道具体原因,它就是返回了0,我打算用文件缓冲~

3 楼

那可能是因为内存碎片的原因,如果一次得不到足够的内存,可以多分配几次.

4 楼

我也这么想,可能还跟操作系统有关吧,不知道他怎么回收的,如果没有连续的空闲空间就失败了,我想可以先建一个文件,然后做内存映象,会不会跟在内存中一样快呢?反正现在的虚存技术对程序员是透明的,或许是一样快的。

5 楼

怎么可能透明?

6 楼

堆和栈往往在一片内存块内,分配堆内存是从低地址往高地址扩展,栈内存是从高地址往低地址扩展(两端向中间靠近,由于这块内存很大,很少出现碰头现象)

7 楼

我用的数据结构教材上没有讲堆,就只是讲了堆排序。是 胡学刚 写的是不是不好?

8 楼

堆排序跟堆栈的堆是两码事

我来回复

您尚未登录,请登录后再回复。点此登录或注册