C++ 如何增加堆栈内存?

C++ 如何增加堆栈内存?,c++,recursion,stack,overflow,C++,Recursion,Stack,Overflow,副本 我正在编写一个分支定界算法,它通过递归函数至少有10000个级别,但由于堆栈溢出错误,它无法工作。下面是我用C++编写的程序的一个简单实例: void f(int k) { if(k==10000) return; f(k+1); } void main() { f(1); return; } 有人能帮忙吗?这是一个链接器问题。您需要告诉链接器增加分配给堆栈的内存量。这对于不同的语言和编译器是不同的。它可以是命令行参数,也可以是配置文件,甚至可以在源代码中指定

副本

我正在编写一个分支定界算法,它通过递归函数至少有10000个级别,但由于堆栈溢出错误,它无法工作。下面是我用C++编写的程序的一个简单实例:

void f(int k)
{
   if(k==10000) return;
   f(k+1);
} 

void main()
{
   f(1);
   return;
}

有人能帮忙吗?

这是一个链接器问题。您需要告诉链接器增加分配给堆栈的内存量。这对于不同的语言和编译器是不同的。它可以是命令行参数,也可以是配置文件,甚至可以在源代码中指定。

这是链接器问题。您需要告诉链接器增加分配给堆栈的内存量。这对于不同的语言和编译器是不同的。它可以是命令行参数,也可以是配置文件,甚至可以在源代码中指定。

任何递归算法都可以使用列表重写为非递归算法。通过这种方式,您将问题从堆栈大小转移到了堆大小,堆通常(远)比线程堆栈大。还有堆栈大小链接器标志,具体取决于编译器/链接器和平台

任何递归算法都可以使用列表重写为非递归算法。通过这种方式,您将问题从堆栈大小转移到了堆大小,堆通常(远)比线程堆栈大。还有堆栈大小的链接器标志,这取决于编译器/链接器和平台,或者您可以将递归重写为一个交互。

或者您可以将递归重写为一个交互。

如果您在Linux上(可能也是Mac?),您可以使用ulimit命令

但是,您可能需要研究优化算法或研究尾部递归。

如果您使用的是Linux(也可能是Mac?),则可以使用ulimit命令


但您可能需要研究优化算法或研究尾部递归。

除了主要问题外,您还可以使用Valgrind及其工具Massif来分析堆栈消耗内存(默认情况下,Massif分析堆,但如果启用了选项,也可以分析堆栈)。

除了主要问题之外,您可以使用Valgrind及其工具Massif来评测堆栈消耗内存(默认情况下,Massif评测堆栈,但如果启用了选项,也可以评测堆栈)。

如果使用_beginthreadex,则可以指定堆栈大小。我认为默认值是1MB。您可以派生一个新线程来完成工作,并指定所需的堆栈大小。

如果使用_beginthreadex,则可以指定堆栈大小。我认为默认值是1MB。您可以派生一个新线程来完成工作,并指定所需的堆栈大小。

查看此密切相关的问题查看此密切相关的问题