Tại sao khi biên dịch Sample 1
, nó sử dụng tất cả RAM của tôi và treo máy tính của tôi chưa Sample 2
biên dịch ngay lập tức mà không làm như vậy?Sử dụng bộ nhớ cực lớn với các mảng lớn của một đối tượng
Mẫu 1:
class Foo
{
int a = 0;
};
class Test
{
Foo foo[4000000] = {};
};
int main()
{
Test t;
}
Mẫu 2:
class Foo
{
int a = 0;
};
int main()
{
Foo foo[4000000] = {};
}
Cuối cùng, là có cách nào để ngăn chặn Mẫu 1 từ việc sử dụng tấn RAM khi biên dịch? Tôi đang sử dụng gcc version 5.3.0
và tôi đã biên soạn ở trên với -std=c++11
. Lưu ý rằng class Test
chỉ yêu cầu bộ nhớ 16 MB.
Đối với bất kỳ
'nó sử dụng tất cả RAM của tôi và làm hỏng máy tính của tôi' Nếu GCC thực hiện điều đó, đó rõ ràng là lỗi trình biên dịch. – user6412786
Hấp dẫn. Tôi sẽ đoán rằng gcc đang cố gắng tạo một hàm tạo cho đối tượng bằng cách tạo mã để khởi tạo mỗi một trong bốn triệu cá thể của 'Foo' trong lớp' Test'. Dunno tại sao gcc không thể làm theo cách tương tự như trong ví dụ thứ hai. P.S. 'lớp Test' nên yêu cầu 16MB bộ nhớ, 4 triệu * 4 byte mỗi int. –
Việc tạo mã không được tối ưu hóa một cách không hợp lý và sau đó tối ưu hóa nó là không hợp lý. Mặc dù, rõ ràng, đó mang lại kết quả tối ưu đáng kể trong trường hợp này. –