Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我们需要在堆中创建一个对象?_C++_Memory_Heap Memory_Stack Memory - Fatal编程技术网

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

C++ 为什么我们需要在堆中创建一个对象?,c++,memory,heap-memory,stack-memory,C++,Memory,Heap Memory,Stack Memory,为什么我们可以使用堆栈满足所有需求 注意:如果你在解释时给出一个例子,那将是非常好的,因为用例子更容易理解 对不起,英语不好。实际上,这是有限和小的。典型的限制是几兆字节。相反,您通常可以在堆内存中分配千兆字节 (在某些系统上,您可能会将系统配置为具有更大的堆栈;但如果需要,您需要告诉用户) 而且,最重要的是,调用堆栈是一个堆栈,因此有一个(后进先出)规程。在许多情况下,您希望以与其分配无关的顺序释放对象,或者仅以“先分配,先销毁”的顺序释放对象(这在堆栈上是不可能的) 考虑阅读一些关于垃圾收集

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

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

对不起,英语不好。

实际上,这是有限和小的。典型的限制是几兆字节。相反,您通常可以在堆内存中分配千兆字节

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

而且,最重要的是,调用堆栈是一个堆栈,因此有一个(后进先出)规程。在许多情况下,您希望以与其分配无关的顺序释放对象,或者仅以“先分配,先销毁”的顺序释放对象(这在堆栈上是不可能的)

考虑阅读一些关于垃圾收集的内容,例如。它教给您有关的有用概念和术语(甚至对于具有手动内存管理的C程序)。还可以阅读关于您的进程的详细信息(se也可以回答,至少对于Linux是这样)


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

没有上下文很难说为什么。问问编写代码的人。一个可能的原因是物理对象太大,无法放在堆栈上。有些对象太大,无法放在堆栈上……它需要在函数结束后继续存在……程序员觉得这样做……因为他不想这样做???@StelTeam:提醒:参数也可能是调用函数时放在堆栈上。它取决于ABI。在我的Linux/x86-64系统上,最多有六个参数通过寄存器,而不是在堆栈上。实际上,堆栈与分配给它的空间一样大。默认值可能很小(相对于某些应用程序的需要),但几乎总是有一些方法显式地为堆栈保留空间。真正的原因是后进先出。如果新节点的生存期不能超过创建它的函数调用的持续时间,那么编写将新节点添加到链接数据结构的函数有点困难。