使用堆栈或堆之间的区别

时间:2016-02-16 22:23:54

标签: c++ c memory stack heap-memory

使用堆栈而不是堆时是否有任何问题?

基本上我想在内存中有大约200个位置(或者更多,1000,谁知道,无论如何这都是假设的),我可以使用数组在堆栈中分配它,或者使用malloc()在堆上分配它。在堆上我必须记住始终free()内存...但是使用堆栈,一旦函数返回,所有内存都很好地为我清理。

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

Stack and Heap

2 个答案:

答案 0 :(得分:1)

首先 - 堆和堆栈不是c++条款。它们是实施细节。

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

但是,堆栈比堆有好处所以尽可能使用它 - 只要你不在堆栈上放置巨大的变量。

注意 - 大多数c ++容器,例如vector,list,deque,可以毫无问题地放在堆栈上,因为它们只在堆栈上放了几个字节,并在堆上分配真正的数据容器。

答案 1 :(得分:-3)

使用堆栈的主要“问题” - 由执行流程控制的变量的生命周期不是由开发人员控制的。虽然变量在某些情况下超出范围时会自动销毁变得更容易,但是有必要且更简单的数据是由开发人员而不是编译器控制的。另一个问题 - 在标准C ++上,你只能在堆栈上分配数据,这个数据在编译时是已知的,而不是堆的情况。

相关问题