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