社区
C++ 语言
帖子详情
请问,在栈的内容可以自动释放而且速度快,为什么对象还要在堆中分配呢?
littleroy
2003-07-31 06:50:54
请问,在栈的内容可以自动释放,为什么还要在堆中分配呢,,,,
栈到底在内存那一个部分,为什么有的书上说,栈是有限????栈真的是有限的码?
还是,,可以是无限的,,,,不过大对象在栈中分配是,不能控制其生存期,或者还有什么其他的原因????
...全文
109
6
打赏
收藏
请问,在栈的内容可以自动释放而且速度快,为什么对象还要在堆中分配呢?
请问,在栈的内容可以自动释放,为什么还要在堆中分配呢,,,, 栈到底在内存那一个部分,为什么有的书上说,栈是有限????栈真的是有限的码? 还是,,可以是无限的,,,,不过大对象在栈中分配是,不能控制其生存期,或者还有什么其他的原因????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
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
打赏
举报
回复
主要原因是:在栈中分配的内存不是持久的,当代码退出函数就自动释放了,而很多时候我们
需要它继续生存。
此外,还有一点就是,栈同时还供函数调用、中断调用的断点返回使用,因此栈溢出是不可恢复性的“中止型”异常,而堆空间不足则安全的多。因此,如果进行大内存分配时,即使它的生存其只在函数内,还是应该在堆中分配。
栈当然是有限的,堆也是有限的,因为内存本身就是有限的:)
为什么说
栈
的
速度快
,
堆
的速度慢?
栈
和
堆
的区别是什么?
栈
与
堆
都是Java用来在Ram
中
存放数据的地方。与C++不同,Java
自动
管理
栈
和
堆
,程序员不能直接地设置
栈
或
堆
。 Java的
堆
是一个运行时数据区,类的
对象
从
中
分配
空间。 这些
对象
通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的
释放
。
堆
是由垃圾回收来负责的,
堆
的优势是可以动态地
分配
内存大小,生存期也不必事先告诉编译器,因为它是...
【python
中
的
对象
存储:
堆
?
栈
?】
在 Python
中
,所有的变量都是
对象
,
对象
在内存
中
存储的位置可以是
堆
空间或
栈
空间,具体取决于
对象
的类型和使用方式。 一般来说,Python
中
的数字、字符串等基本类型的
对象
都存储在
栈
空间
中
,而复杂的
对象
如列表、字典、
对象
实例等则存储在
堆
空间
中
。当这些
对象
被作为参数传递给函数时,它们的引用会被压入
栈
空间
中
,函数返回时再从
栈
空间
中
弹出这些引用,但实际的
对象
并没有被复制,仍然存在于
堆
空间
中
。
C++
栈
对象
,
堆
对象
,静态
对象
的理解
栈
对象
的优势是在适当的时候
自动
生成,又在适当的时候
自动
销毁,不需要程序员操心;而且
栈
对象
的创建速度一般较
堆
对象
快,因为
分配
堆
对象
时,会调用operator new操作,operator new会采用某种内存空间搜索算法,而该搜索过程可能是很费时间的,产生
栈
对象
则没有这么麻烦,它仅仅需要移动
栈
顶指针就可以了。但是要注意的是,通常
栈
空间容量比较小,一般是1MB~2MB,所以体积比较大的
对象
不适合在
栈
中
分配
。特别要注意递归函数
中
最好不要使用
栈
对象
,因为随着递归调用深度的增加,所需的
栈
空间也会线性增加,当所需
栈
空
C语言之
堆
栈
1 - 关于c语言
中
栈
和
堆
释放
的问题
栈
上
分配
内存和回收都是
自动
的,不用程序员来处理
堆
上
分配
内存有系列的函数或操作符 如c的mallocvsfree c++的newvsdelete 这些内存的
分配
和
释放
由程序员来负责 引用的长篇大论开始了: 在C++
中
,内存分成5个区,他们分别是
堆
、
栈
、自由存储区、全局/静态存储区和常量存储区。
栈
,就是那些由编译器在需要的时候
分配
,在不需要的时候
自动
清楚的变量的存储区。里面的变量通常...
堆
和
栈
的内存
分配
堆
和
栈
的内存
分配
堆
和
栈
的区别
栈
(stack):
堆
(heap)
堆
和
栈
的区别
栈
(stack): stack 用于静态
分配
内存,内存
分配
发生在连续的内存上。在
栈
上
分配
内存,首先编译器要知道
分配
的内存的大小,没当函数调用时,其变量都会在stack上
分配
内存。每当函数调用结束时,变量
分配
的内存就会被
释放
。这个过程在编译器内有一定的预设,一般来说,程序员不需要考虑内存的
分配
和
释放
过程。在stack上
分配
内存的方式成为临时内存
分配
,因一旦程序完成执行,该程序使用的所有数据都会在stack
中
被刷新。 这是一种临时的内
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章