-1

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

4

2 回答 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 回答