C / C +程序的最大堆栈大小?

我试过以下程序。 创建此程序的目的是发现有关堆栈大小的更多信息。

int main() { int nStack[100000000]; return 0; } 

执行上面的代码后,程序因堆栈大小分配而崩溃。 堆栈的最大可能大小是多少? 它是否适用于每个程序/计算机? 可以增加吗?

我想知道为了知识。 如果任何人都可以在C / C ++中提供示例,那将非常有用。

堆栈的最大大小是多少?

取决于实施。 如今PC上通常只有一到几兆字节。

它是否适用于每个程序/计算机?

它通常固定在链接上,但标准没有定义它。 某些操作系统也可以在运行时限制堆栈( RLIMIT_STACK ,linux上的RLIMIT_STACK )。

可以增加吗?

根据实施情况,这可能是可能的。 有关详细信息,请参阅链接器的文档。 可能还有操作系统和可执行格式的文档。

你应该动态分配这样的大型数组。

对于基于Linux的应用程序,我们可以使用getrlimit和setrlimit API来了解各种内核资源限制,例如核心文件的大小,cpu时间,堆栈大小,漂亮的值,最大值。 没有。 “RLIMIT_STACK”是linux内核中定义的堆栈的资源名称。 下面是检索堆栈大小的简单程序:

 #include  #include  #include  #include  using namespace std; int main() { struct rlimit sl; int returnVal = getrlimit(RLIMIT_STACK, &sl); if (returnVal == -1) { cout << "Error. errno: " << errno << endl; } else if (returnVal == 0) { cout << "stackLimit soft - max : " << sl.rlim_cur << " - " << sl.rlim_max << endl; } } 

要更改为进程加载程序引发的主线程分配的堆栈大小,以便在其入口点运行代码,请查看链接器文档。 也可以在可执行标头元数据中编辑该堆栈大小。

我试过下面的程序。

 int main() { int nStack[519492]; cout<<"Okay!"; return 0; } 

输出:

 Okay! 

但是如果我将数组大小增加1个字节,程序就会崩溃。

 int main() { int nStack[519493]; cout<<"Okay!"; return 0; } 

输出:

 No output. Program crashes.