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

Why do we need to create an object in heap?

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

注意:如果在讲解的时候能举个例子就更好了,有例子更容易理解。

抱歉英语不好。

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

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

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

考虑阅读一些有关垃圾收集的内容,例如GC handbook. It teaches you useful concepts and terminology about dynamic memory allocation (even for C programs with manual memory management). Read also about the virtual address space of your process (se also this 答案,至少 Linux).

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