[英]Programmatically find maximum static array size in C++
我很好奇是否可以确定数组在C ++中可以拥有的最大大小。
#include <iostream>
using namespace std;
#define MAX 2000000
int main()
{
long array[MAX];
cout << "Message" << endl;
return 0;
}
这个编译得很好,但是一旦我运行它就会出现段错误(即使实际上没有引用数组)。 我知道这也是数组大小,因为如果我将其更改为1000000它运行得很好。
那么,是否有某些定义或某种方式具有#define MAX MAX_ALLOWED_ARRAY_SIZE_FOR_MY_MACHINE_DEFINED_SOMEWHERE_FOR_ME
?
我实际上并不需要这个,这个问题是出于好奇的缘故。
没有办法静态地确定这个,因为实际限制取决于你的线程给出了多少堆栈空间。 你可以创建一个新线程,给它10兆字节的堆栈,你就可以分配一个相应更大的本地数组。
您可以在堆栈上分配的数量还取决于到目前为止已经使用了多少。
void foo(int level){
int dummy[100];
cerr<<level<<endl;
foo(level+1);
}
然后,也许您可以将最后打印的级别乘以400个字节。 递归调用占据了我猜的大部分堆栈空间,但你可以得到一个下限。 我可能会错过对内存管理的一些理解,因此可以更正。
所以这就是我在我的机器上得到的具有不同虚拟阵列大小的东西。
level array size stack total
24257 100 9702800
2597 1000 10388000
260 10000 10400000
129 20000 10320000
64 40000 10240000
25 100000 10000000
12 200000 9600000
请阅读此内容以了解硬件和编译器设置的限制。 我不认为你可以定义一个MAX来立即使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.