使用全栈内存

问题描述

您好,我听说在 C++ 堆栈内存中用于“普通”变量。如何使堆栈已满?我尝试使用大量数组,但没有帮助。堆栈有多大以及它位于何处?

解决方法

C++ 语言没有指定诸如“堆栈”之类的东西。这是一个实现细节,因此除非我们正在讨论 C++ 的特定实现,否则没有任何意义。

但是,在典型的 C++ 实现中,自动变量存储在执行堆栈中。

如何使堆栈已满?

第 1 步:使用堆栈大小有限的语言实现。这很常见。

第 2 步:创建超出限制的自动变量。或者嵌套太多非尾递归函数调用。如果幸运的话,程序可能会崩溃。

您不希望堆栈在生产使用中耗尽。

栈有多大

取决于语言实现。它甚至可以是可配置的。在常见的桌面/服务器系统上,默认值为 1 到几兆字节。较少涉及嵌入式系统。

它在哪里?

内存中语言实现选择的某处。


最重要的一点是,可用于自动变量的内存通常是有限的。因此:

  • 不要使用大型自动变量。
  • 当深度的渐近增长是线性的或更糟时,不要使用递归。
  • 不要让用户输入影响自动变量的数量或大小或不受约束的递归深度。
,

你好,我听说在 C++ 堆栈内存中用于“普通”变量。

在函数或 main 中声明的局部(自动)变量主要在堆栈(或寄存器)上分配内存,并在执行完成时释放。

如何使堆栈满?我尝试使用大量数组,但没有帮助。

使用大量数组、许多递归调用、传递包含大量数组的大型结构的参数都是方法。另一种方法也可能是减少堆栈大小:-Wl,--stack,number (for gcc)

堆栈有多大以及它位于何处?

这取决于平台、操作系统等。标准不决定任何堆栈大小。它的位置在程序启动之前由操作系统确定。操作系统从虚拟内存中为堆栈分配内存。