使用堆栈而不是堆时是否有任何问题?
基本上我想在内存中有大约200个位置(或者更多,1000,谁知道,无论如何这都是假设的),我可以使用数组在堆栈中分配它,或者使用malloc()
在堆上分配它。在堆上我必须记住始终free()
内存...但是使用堆栈,一旦函数返回,所有内存都很好地为我清理。
我只是想知道在堆栈上保存大量内存是否存在任何问题。据我所知,堆栈和堆基本相同,只是它们位于RAM框架的两侧,它们朝另一侧生长,如下图所示。
答案 0 :(得分:1)
首先 - 堆和堆栈不是c++
条款。它们是实施细节。
使用堆栈和堆的实现(可能大多数 - 如果不是全部的话)通常具有堆栈大小的上限。因此,在堆栈上放置巨大的变量会导致堆栈溢出(这通常会导致不可预测的错误)。
但是,堆栈比堆有好处所以尽可能使用它 - 只要你不在堆栈上放置巨大的变量。
注意 - 大多数c ++容器,例如vector,list,deque,可以毫无问题地放在堆栈上,因为它们只在堆栈上放了几个字节,并在堆上分配真正的数据容器。
答案 1 :(得分:-3)
使用堆栈的主要“问题” - 由执行流程控制的变量的生命周期不是由开发人员控制的。虽然变量在某些情况下超出范围时会自动销毁变得更容易,但是有必要且更简单的数据是由开发人员而不是编译器控制的。另一个问题 - 在标准C ++上,你只能在堆栈上分配数据,这个数据在编译时是已知的,而不是堆的情况。