问题描述
您好,我听说在 C++ 堆栈内存中用于“普通”变量。如何使堆栈已满?我尝试使用大量数组,但没有帮助。堆栈有多大以及它位于何处?
解决方法
C++ 语言没有指定诸如“堆栈”之类的东西。这是一个实现细节,因此除非我们正在讨论 C++ 的特定实现,否则没有任何意义。
但是,在典型的 C++ 实现中,自动变量存储在执行堆栈中。
如何使堆栈已满?
第 1 步:使用堆栈大小有限的语言实现。这很常见。
第 2 步:创建超出限制的自动变量。或者嵌套太多非尾递归函数调用。如果幸运的话,程序可能会崩溃。
您不希望堆栈在生产使用中耗尽。
栈有多大
取决于语言实现。它甚至可以是可配置的。在常见的桌面/服务器系统上,默认值为 1 到几兆字节。较少涉及嵌入式系统。
它在哪里?
内存中语言实现选择的某处。
最重要的一点是,可用于自动变量的内存通常是有限的。因此:
- 不要使用大型自动变量。
- 当深度的渐近增长是线性的或更糟时,不要使用递归。
- 不要让用户输入影响自动变量的数量或大小或不受约束的递归深度。
你好,我听说在 C++ 堆栈内存中用于“普通”变量。
在函数或 main 中声明的局部(自动)变量主要在堆栈(或寄存器)上分配内存,并在执行完成时释放。
如何使堆栈满?我尝试使用大量数组,但没有帮助。
使用大量数组、许多递归调用、传递包含大量数组的大型结构的参数都是方法。另一种方法也可能是减少堆栈大小:-Wl,--stack,number (for gcc)
堆栈有多大以及它位于何处?
这取决于平台、操作系统等。标准不决定任何堆栈大小。它的位置在程序启动之前由操作系统确定。操作系统从虚拟内存中为堆栈分配内存。