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

Ste*_*eam 0 c++ memory heap stack

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

注意:如果您在解释时给出一个例子,那将是非常好的,因为通过示例更容易理解.

抱歉英语不好.

Bas*_*tch 7

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

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

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

考虑阅读有关垃圾收集的内容,例如GC手册.它教您有关动态内存分配的有用概念和术语(即使对于具有手动内存管理的C程序).另请阅读有关进程的虚拟地址空间(另请参阅答案,至少对于Linux).

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