我有一个int flags[(1<<20)];
数组,似乎有问题,它会导致分段错误。这是堆栈溢出问题吗?我应该设置多少堆栈大小以及如何设置?
问问题
293 次
2 回答
0
该大小的int
数组为 4MB。根据系统,这个数字可能很大也可能不大。在 x86 Linux 中,默认堆栈大小通常为 8-10MB,但在其他平台上可能会有所不同
在 Linux 中,您可以通过以下命令设置堆栈大小(以 KB 为单位)
ulimit -s 8192
但这会影响所有进程的堆栈大小,不推荐。要仅增加您自己进程的堆栈大小,请使用setrlimit
在 Windows中,堆栈大小是在链接时设置的,但同样,它只应在必要的情况下增加
堆栈只应用于中小型变量。对于如此大的数组,您应该在堆上分配
int *flags = malloc((1 << 20)*sizeof(int));
并且记得在使用后释放它
于 2013-11-06T02:50:33.413 回答
0
如果您的编程语言是C++,则使用 std::vector,而不是 C 样式数组:
std::vector<int> flags(1<<20);
flags[0] = 1;
如果您的编程语言是C,请阅读 Lưu Vĩnh Phúc 的答案
于 2013-11-06T04:41:57.280 回答