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