使用全栈内存

Using whole stack memory

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

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

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

How do I make stack full?

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

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

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

How big is stack

取决于语言实现。它甚至可以是可配置的。在常见的 desktop/server 系统上,默认值为一到几兆字节。嵌入式系统较少。

and where is it located?

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


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

  • 不要使用大的自动变量。
  • 当深度的渐近增长是线性或更差时,不要使用递归。
  • 不要让用户输入无限制地影响自动变量的数量或大小或递归的深度。

Hello I heard that in c++ stack memory is being used for "normal" variables.

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

How do I make stack full? I tried to use ton of arrays but it didnt help.

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

How big is stack and where is it located?

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