为什么我们需要在堆中创建一个对象?

时间:2018-02-23 16:31:55

标签: c++ memory stack heap

为什么我们可以使用堆栈满足我们的所有需求?

注意:如果你在解释时给出一个例子会非常好,因为通过例子更容易理解。

抱歉英语不好。

1 个答案:

答案 0 :(得分:6)

在实践中,call stack是有限且小的。典型的限制是几兆字节。相反,您通常可以在堆内存中分配千兆字节。

(在某些系统上,您可以将系统配置为具有更大的堆栈;但是如果需要,则需要告知用户)

此外,最重要的是,调用堆栈是一个堆栈,因此具有LIFO(后进先出)规则。在许多情况下,您希望以与其分配无关的顺序释放对象,或者只是在"首先分配,首先销毁"订单(这在堆栈上是不可能的)。

考虑阅读有关垃圾收集的内容,例如: GC handbook。它教您有关dynamic memory allocation的有用概念和术语(即使对于具有手动内存管理的C程序)。另请阅读您的流程virtual address space(另请this回答,至少对Linux而言)。

动态内存分配的另一个优点是,相同的可执行文件可以在各种计算机上运行(具有各种资源,特别是不同数量的RAM),但却无法处理相同数量的数据。如果您必须静态分配所有内存,则情况并非如此(例如,我的笔记本电脑上甚至无法启动具有50千兆字节静态数据的C程序。)