Mã này tạo ra lỗi phân đoạn trong quá trình khai báo mảng. Tôi đang bối rối là tại sao điều này xảy ra. Tôi cố ý chọn 2000000000 làm giá trị vì nó dưới 2^31 và có thể vừa với một biến số nguyên.Lập trình C, tại sao khai báo mảng lớn này tạo ra lỗi phân đoạn?
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
Thậm chí nếu không phải vậy, 2000000000 * 4 = 8.000.000.000 byte trên nền tảng 32 bit. Đó là gần 2^33, đó là nhiều hơn bộ nhớ có sẵn. –
@ Chris: Vâng - Tôi đã không thực sự đếm số không cho đến sau khi tôi đăng. Đó là rất nhiều số nguyên! –
Cũng có thể phân bổ các mảng rất lớn với thời gian lưu trữ tĩnh. – caf