c++ - 使用栈和堆的区别

标签 c++ c memory stack heap-memory

使用栈代替堆有什么问题吗?

基本上,我想要内存中大约 200 个位置(或者更多,1000 个,谁知道,这只是假设),我可以使用数组在堆栈中分配它,或者使用 malloc() 在堆上分配它。 。在堆上我必须记住永远free()内存...但是使用堆栈,一旦函数返回,所有内存都会被很好地清理干净。

我只是想知道在堆栈上保存大量内存是否存在任何问题。据我所知,堆栈和堆基本上是相同的,只是它们位于 RAM 框架的相对两侧,并且它们向另一侧增长,如下图所示。

Stack and Heap

最佳答案

首先 - 堆和栈不是c++术语。它们是实现细节。

使用堆栈和堆的实现(可能是大多数(如果不是全部))通常具有堆栈大小的上限。因此,将巨大的变量放在堆栈上可能会导致堆栈溢出(这通常会导致不可预测的错误)。

但是,堆栈比堆有优势,因此只要可以就使用它 - 前提是您不将巨大的变量放在堆栈上。

注意 - 大多数 C++ 容器,例如 vector 、列表、双端队列可以毫无问题地放置在堆栈上,因为它们只在堆栈上放置几个字节并在堆上分配真正的数据容器。

关于c++ - 使用栈和堆的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35444188/

相关文章:

c - 在 GUROBI 的 C API 中添加约束需要太长时间

c - C 中指针的加法

python - Matplotlib 和 Pyplot.close() 不释放内存? - 后端相关的 Qt4Agg

windows - 内存保留和提交

c++ - 带有 C++ 编译器包的 Eclipse

c++ - win32 应用程序不是面向对象的,为什么有这么多指针?

c - 初始化指向结构体的指针的元素

c - 如何通过fread函数读取char*字符串?

c++ - 每个文件都有自己的静态变量拷贝吗?

c++ - 在 BST 中使用模板重载运算符