【发布时间】:2018-04-20 07:24:23
【问题描述】:
我想知道为什么这可以达到 1e8 的大小。对于大于 1e8 的尺寸,编译器会说“尺寸太大”。
#include <stdio.h>
int main() {
printf("allocating...\n");
static float m[(int)1e8];
printf("done\n");
}
虽然这仅适用于 1e5。如果 size 设置为 1e6,它确实可以正常编译,但在打印第一行之前就在运行时崩溃。
#include <stdio.h>
int main() {
printf("allocating...\n");
float m[(int)1e5];
printf("done\n");
}
这些限制是什么?为什么static 有更高的限制?
编辑:平台是 windows7 中的 MinGW64。还没在linux下测试过。
【问题讨论】:
-
如果您使用的是 Linux 系统,您可以键入
ulimit -s来确定允许的最大堆栈大小。这通常是 8 MB。 (以 1 kB 的倍数打印)。