Этот код вызывает ошибку сегментации во время объявления массива. Я смущен, почему это происходит. Я намеренно выбрал 2000000000 в качестве значения, потому что он ниже 2^31 и может вписываться в целочисленную переменную.C программирование, почему это объявление большого массива создает ошибку сегментации?
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
Даже если бы это было не так, 2000000000 * 4 = 8 000 000 000 байт на 32-битной платформе. Это почти 2^33, что больше, чем доступная память. –
@ Крис: Да, я на самом деле не считал нули до тех пор, пока я не отправил. Это целые числа! –
Обычно также можно выделить очень большие массивы со статической продолжительностью хранения. – caf