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

Pan*_*apa 21 c c++ stack data-structures

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

int main()
{
    int nStack[100000000];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

eer*_*ika 19

堆栈的最大大小是多少?

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

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

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

可以增加吗?

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

你应该动态分配这样的巨大数组.


Jag*_*rla 9

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

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
#include <errno.h>
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;
   }
}
Run Code Online (Sandbox Code Playgroud)


Pan*_*apa 0

我尝试了下面的程序。

int main()
{
    int nStack[519492];
    cout<<"Okay!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Okay!
Run Code Online (Sandbox Code Playgroud)

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

int main()
{
    int nStack[519493];
    cout<<"Okay!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

No output. Program crashes.
Run Code Online (Sandbox Code Playgroud)