C++里,对象存放在堆里和存放在栈里相比有什么优势吗?什么情况下该优先考虑存堆里?

2025-03-24 07:15:23
推荐回答(3个)
回答1:

楼上两位回答都挺好的,我来总结下
第一,堆空间大,适合放数组以及 类对象(系统自带或自定义)
第二,里面的数据不会自动清空,这样就可以利用指针来访问,(自动清空数据恰好是栈的优点)。所有在使用的时候要辩证来用,如果是用指针来访问,就用堆,千万不能用栈
第三、效率低,因为堆空间大,所以相对来说效率会低一点
第四、使用堆长期运行,有可能会导致内存碎片问题。
综上所述,堆和栈要结合运行,充分利用两种的优点。建议采用内存池来管理系统所需要的内存。

回答2:

栈的空间大小是有限的,可以在编译器中设置,默认的话一般在1M~2M左右。
而堆的空间在内存剩余空间允许的范围内是无限的。
在栈上开辟数据,存取效率高,而且无需手动回收,在出作用域后系统会自动回收。
而堆上开辟的数据就需要自己回收了。
由于栈的大小有限,所以只可以存储一些比较小的变量。如果你的对象相对较大,比如说一个1024字节的数组,你还是放到堆里吧。
对于变长数组和alloca(),虽然其语法浑然天成,但可能有不可见的内存隐患,而且无法做平台见移植,不推荐使用。

回答3:

存放在堆里就可以在你需要释放的时候去释放,内存需要动态分配的时候或者你需要变量在特定情况下销毁内存。