Ten kod powoduje błąd segmentacji podczas deklaracji macierzy. Nie wiem, dlaczego tak się dzieje. Celowo wybrałem 2000000000 jako wartość, ponieważ jest poniżej 2^31 i może zmieścić się w zmiennej liczbowej.C programowanie, dlaczego ta duża deklaracja tablicowa powoduje błąd segmentacji?
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
Nawet jeśli tak nie było, 2000000000 * 4 = 8 000 000 000 bajtów na platformie 32-bitowej. To prawie 2^33, czyli więcej niż dostępna pamięć. –
@Chris: Tak - właściwie nie liczyłem zer, dopóki nie napisałem. To dużo liczb całkowitych! –
Zazwyczaj można przydzielić bardzo duże tablice z czasem przechowywania statycznego. – caf