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上).
可以增加吗?
根据实施情况,这可能是可能的.有关详细信息,请参阅链接器的文档.可能还有操作系统和可执行格式的文档.
你应该动态分配这样的巨大数组.
对于基于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)
我尝试了下面的程序。
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)