社区
C++ 语言
帖子详情
请问,在栈的内容可以自动释放而且速度快,为什么对象还要在堆中分配呢?
littleroy
2003-07-31 06:50:54
请问,在栈的内容可以自动释放,为什么还要在堆中分配呢,,,,
栈到底在内存那一个部分,为什么有的书上说,栈是有限????栈真的是有限的码?
还是,,可以是无限的,,,,不过大对象在栈中分配是,不能控制其生存期,或者还有什么其他的原因????
...全文
210
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
打赏
举报
回复
主要原因是:在栈中分配的内存不是持久的,当代码退出函数就自动释放了,而很多时候我们
需要它继续生存。
此外,还有一点就是,栈同时还供函数调用、中断调用的断点返回使用,因此栈溢出是不可恢复性的“中止型”异常,而堆空间不足则安全的多。因此,如果进行大内存分配时,即使它的生存其只在函数内,还是应该在堆中分配。
栈当然是有限的,堆也是有限的,因为内存本身就是有限的:)
栈
和
堆
的区别
本文详细介绍了程序
中
堆
和
栈
在多个方面的不同。内存
分配
上,
栈
由编译器
自动
分配
释放
,
堆
一般由程序员
分配
释放
;申请方式上,
栈
自动
分配
,
堆
需手动申请;系统响应、大小限制、申请效率和存储
内容
也各有特点。
【底层机制】为什么
栈
的内存
分配
比
堆
快?
本文分析了
栈
内存
分配
比
堆
更快的核心原因。
栈
通过简单的指针移动完成
分配
和
释放
,具有O(1)时间复杂度;而
堆
需要复杂的内存搜索、管理与同步机制,开销较大。
栈
内存具有良好的内存局部性和缓存友好性,且线程间相互独立,无需同步。文章还通过代码示例说明了
栈
和
堆
在操作层面的差异,并建议开发者优先使用
栈
内存以提升性能。
为什么说
栈
的
速度快
,
堆
的速度慢?
栈
和
堆
的区别是什么?
本文详细探讨了Java
中
栈
和
堆
的区别,解释了它们在内存管理
中
的角色,包括数据存储位置、生命周期管理以及垃圾回收机制。同时,文章对比了基本类型和
对象
在
栈
和
堆
中
的存储方式,以及String类的特殊处理,强调了Java
自动
内存管理和优化的重要性。
c++
中
堆
和
栈
的区别
本文详细介绍了C/C++
中
的
堆
和
栈
的区别与联系,包括内存
分配
、申请方式、系统响应、大小限制、效率、存放
内容
以及存取效率等方面。
堆
通常由程序员
分配
和
释放
,
栈
由编译器
自动
管理。
栈
的效率较高,但空间有限,而
堆
虽然灵活,但
分配
和
释放
可能导致碎片。在C
中
,内存分为
堆
、
栈
、全局区、静态区和常量区;在C++
中
,内存则分为
堆
、
栈
、自由存储区、全局(静态)存储区和常量存储区。
堆
和
栈
的对比显示,
栈
适合用于快速高效且大小有限制的场景,
堆
则适用于需要更大、更灵活内存的场合。
堆
与
栈
的区别详细总结
堆
栈
在计算机内存管理
中
扮演重要角色。
栈
由系统
自动
分配
和
释放
,常用于函数参数、局部变量;而
堆
由程序员控制,适用于大块内存的动态
分配
。
栈
操作
速度快
,存放在一级缓存,
堆
则较慢,存储在二级缓存。此外,
堆
用于数据结构
中
的树形结构,
栈
遵循先进后出原则。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章