我已通过 ulimit -s 2000 和 ulimit -Ss 2000 将堆栈大小设置为 2000Kb 以实现硬限制。在下面的程序中,我分配了大约 2040000(510000 x 4) 字节,这比我限制的要少,即。 2048000(2000*4) 字节,但我看到我的程序崩溃了!任何人都可以提出为什么会发生这种情况。
#include <stdio.h>
#include <malloc.h>
int main()
{
int a[510000] = {0};
a[510000] = 1;
printf("%d", a[510000]);
fflush(stdout);
sleep(70);
}
编辑 1:崩溃不是因为数组索引超出范围,因为我尝试了较低的索引但仍然崩溃。只有当我用 ulimit 限制时才会发生这种情况。
最佳答案
int a[510000]
将是一个索引从 0
到 509999
的数组。 a[510000]
超出数组范围。
关于c - 即使 Proc 分配的内存少于 ulimit 限制的内存,它也会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271742/