[int [2²⁰]数组导致OpenMP分段错误

问题描述 投票:-1回答:2

我有一个int flags[(1<<20)];数组,似乎出了点问题,它导致分段错误。这是堆栈溢出问题吗?我应该设置多少堆栈大小以及如何设置?

arrays gcc openmp stack-overflow icc
2个回答
0
投票

如果您的编程语言是C ++,则使用std :: vector,而不是C样式数组:

std::vector<int> flags(1<<20);
flags[0] = 1;

如果您的编程语言是C,请阅读LưuVĩnhPhúc的答案


0
投票

该大小的int数组为4MB。根据系统,此数字可能很大也可能不会很大。在x86 Linux中,默认堆栈大小通常为8-10MB,但在其他堆栈上,此大小可能有所不同

在Linux中,您可以通过以下命令设置堆栈大小(以KB为单位)>>

ulimit -s 8192

但是会影响所有进程

的堆栈大小,因此不建议这样做。要仅增加您自己的进程的堆栈大小,请use setrlimit

在Windows setrlimit中,但同样,应仅在必要的情况下才将其增加

堆栈仅应用于中小型变量。对于如此大的数组,您应该改为在堆上分配

stack size is set at link time

并且记住使用后将其释放

© www.soinside.com 2019 - 2024. All rights reserved.