请问,在栈的内容可以自动释放而且速度快,为什么对象还要在堆中分配呢?

littleroy 2003-07-31 06:50:54
请问,在栈的内容可以自动释放,为什么还要在堆中分配呢,,,,
栈到底在内存那一个部分,为什么有的书上说,栈是有限????栈真的是有限的码?
还是,,可以是无限的,,,,不过大对象在栈中分配是,不能控制其生存期,或者还有什么其他的原因????
...全文
27 点赞 收藏 6
写回复
6 条回复
imeng99 2003年08月01日
就我所知,栈是自动变量/对象、临时变量、函数调用返回时使用的,堆主要是用于new操作分配的内存。
回复 点赞
fixopen 2003年08月01日
同意 plainsong(短歌)

我举个例子说明:

FILE* fopen(char* filename, char* mode);

这是常用的打开文件的函数。它返回一个FILE结构指针,假设FILE结构对象(变量)是在栈上存在的,那么随着fopen函数的返回,它被自动析构,那么返回的FILE指针指向谁呢?
回复 点赞
Zark 2003年08月01日
同意plainsong(短歌)的观点,补充:

次要原因是:
在栈中分配的空间大小是在编译期间就必面确定,而在堆上分配的空间可以延至运行期再确定。(举例:栈上无法建可变长数组)。

栈是有限的,往往很小,VC6默认为1M。堆也是有限的,往往很大,WIN32线性寻址的4G空间中除代码段,数据段,extra段,系统占用及保留和栈空间以外,都是属于堆空间的。
回复 点赞
magic007 2003年07月31日
首先得明白栈和堆在程序中所起的主要作用,就不难理解楼主的问题了
回复 点赞
yakai 2003年07月31日
内存是有限的,所以一切都是有限的

不过栈确实限定了一个长度,不让它随意吃光内存的


栈中是自动在超出作用范围时清除对象的,堆可以在某个地方指定清掉它
回复 点赞
短歌如风 2003年07月31日

主要原因是:在栈中分配的内存不是持久的,当代码退出函数就自动释放了,而很多时候我们
需要它继续生存。

此外,还有一点就是,栈同时还供函数调用、中断调用的断点返回使用,因此栈溢出是不可恢复性的“中止型”异常,而堆空间不足则安全的多。因此,如果进行大内存分配时,即使它的生存其只在函数内,还是应该在堆中分配。

栈当然是有限的,堆也是有限的,因为内存本身就是有限的:)
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告