【发布时间】:2016-05-28 10:02:47
【问题描述】:
使用栈代替堆有什么问题吗?
基本上我想要内存中的大约 200 个位置(或者更多,1000,谁知道,这无论如何都是假设的),我可以使用数组在堆栈中分配它,或者使用 malloc() 在堆中分配它。在堆上,我必须记住始终free() 内存......但是使用堆栈,一旦函数返回,所有内存都会为我很好地清理。
我只是想知道在堆栈上保存大量内存是否有任何问题。据我所知,栈和堆基本上是一样的,只是它们在一个 RAM 框架中位于相对的两侧,并且它们朝着另一侧增长,如下图所示。
【问题讨论】:
-
堆栈空间有限。如果你不知道你想要多少,只需使用
vector(C++) 并且不用担心内存管理。 -
您的理解充其量只是片面的。但是关于这个话题已经存在很多问题了。阅读其中的一些内容,看看他们是否回答了您的问题。例如:What and where are the stack and heap?
-
这个旧的简化模型在你的程序中没有超过 1 个执行线程。
-
一般的经验法则是在自动存储(即全局变量)或动态内存(又名堆)中分配大型数据结构。通过引用或指针传递大项目。指针和引用占用的空间比大对象少。传递给函数时可以复制整个对象而不使用指针或引用。
-
仅仅因为图表显示堆栈沿某个方向增长并不等于允许它一直增长。最大堆栈大小通常被限制为比最大堆大小小得多的值。
标签: c++ c memory stack heap-memory