微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用全栈内存

如何解决使用全栈内存

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

解决方法

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

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

如何使堆栈已满?

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

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

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

栈有多大

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

它在哪里?

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


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

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。