2012-01-25 44 views
7

Xem xét một vòng lặp nhân có cái gì đó như:Dữ liệu bất biến "đốt cháy" RAM trong D?

... 
auto msg = new immutable(DataWrittenMsg)(bytesWritten); 
masterTid.send(msg); 
... 

Liệu điều này chậm chạp nhưng chắc chắn ăn lên tất cả RAM, như thời gian đạt Inf? Hoặc có thể không sử dụng dữ liệu bất biến được thu thập bởi GC?

(Tôi đang đọc TDPL Ch. 13 và tôi nhận được ấn tượng khi dữ liệu không thay đổi được thiết lập nó không bao giờ có thể nhận được unset?)

Trả lời

10

Không, GC vẫn sẽ nhặt những vật unreferenced, bất kể constness của họ.

Về "một khi dữ liệu bất biến được đặt, nó không bao giờ có thể không được đặt" - điều này chỉ theo nghĩa logic. Giả sử rằng an toàn bộ nhớ của chương trình của bạn không bị xâm phạm, tất cả các đối tượng phân bổ không thay đổi được chương trình của bạn truy cập sẽ không thay đổi miễn là chúng có thể truy cập được, mặc dù bộ nhớ thực tại địa chỉ đó có thể được sử dụng lại khi các đối tượng đó không thể truy cập được.

Các vấn đề liên quan