Tôi đang cố gắng tìm ra số lượng bộ nhớ mà tôi có thể phân bổ trước khi phân bổ không thành công.Dung lượng bộ nhớ lớn nhất mà tôi có thể phân bổ trên MacBook Pro của mình là bao nhiêu?
Mã C++ đơn giản này cấp phát bộ đệm (có kích thước 1024 byte), gán cho năm ký tự cuối cùng của bộ đệm, báo cáo và sau đó xóa bộ đệm. Sau đó nó tăng gấp đôi kích thước của bộ đệm và lặp lại cho đến khi nó không thành công.
Trừ khi tôi thiếu thứ gì đó, mã có thể phân bổ tới 65 terabyte bộ nhớ trước khi nó không thành công trên MacBook Pro của tôi. Điều này thậm chí có thể? Làm thế nào nó có thể phân bổ bộ nhớ nhiều hơn tôi có trên máy? Tôi phải thiếu một cái gì đó đơn giản.
int main(int argc, char *argv[])
{
long long size=1024;
long cnt=0;
while (true)
{
char *buffer = new char[size];
// Assume the alloc succeeded. We are looking for the failure after all.
// Try to write to the allocated memory, may fail
buffer[size-5] = 'T';
buffer[size-4] = 'e';
buffer[size-3] = 's';
buffer[size-2] = 't';
buffer[size-1] = '\0';
// report
if (cnt<10)
cout << "size[" << cnt << "]: " << (size/1024.) << "Kb ";
else if (cnt<20)
cout << "size[" << cnt << "]: " << (size/1024./1024.) << "Mb ";
else
cout << "size[" << cnt << "]: " << (size/1024./1024./1024.) << "Gi ";
cout << "addr: 0x" << (long)buffer << " ";
cout << "str: " << &buffer[size-5] << "\n";
// cleanup
delete [] buffer;
// double size and continue
size *= 2;
cnt++;
}
return 0;
}
là phân bổ các biến trên bộ nhớ "Bộ nhớ truy cập ngẫu nhiên" hoặc trên "Đĩa cứng"? – Raindrop7
BTW: Nếu bạn thực sự cố gắng xác định mức tối đa thực tế bạn có thể phân bổ, bạn sẽ có vòng lặp bổ sung được sử dụng sau lần thất bại đầu tiên trong đó bạn giảm số tiền được thêm vào yêu cầu phân bổ của mình theo hệ số hai lần cho đến khi bạn tăng mức tối thiểu bạn muốn kiểm tra. Ví dụ: yêu cầu cho 512GiB là OK, yêu cầu cho 1024GiB không thành công, sau đó yêu cầu (512GiB + 256GiB) = 768GiB (nếu OK sau đó (768GiB + 128GiB) = 896GiB, nếu thất bại thì thử (512GiB + 128GiB) = 640GiB), v.v. – Makyen
macbook pro hay không là không thích hợp ở đây, bạn không cần phải đặt nó trong tiêu đề. [Phân bổ nhiều bộ nhớ hơn so với tồn tại bằng cách sử dụng malloc] (http://stackoverflow.com/q/19750796/995714), [bộ nhớ tối đa mà malloc có thể phân bổ] (http://stackoverflow.com/q/2798330/995714) –