2012-01-22 35 views
7

Sau khi instantiating một danh sách (vì vậy bỏ qua các chi phí liên quan đến việc tạo ra một danh sách), chi phí bộ nhớ của việc thêm cùng một đối tượng vào một danh sách hơn và hơn? Tôi tin rằng sau đây chỉ cần thêm cùng một con trỏ vào bộ nhớ vào danh sách hơn và hơn, và do đó danh sách này thực sự không chiếm nhiều bộ nhớ. Ai đó có thể xác nhận rằng đó là trường hợp?Danh sách với các đối tượng lặp lại - Chi phí bộ nhớ là bao nhiêu?

List<newType> list = new List<newType>(); 

newType example = new newType(); 

for (int i = 0; i < 10000; i++) 
{ 
    list.Add(example); 
} 

(Giả sử rằng một Newtype mới chiếm một số lượng đáng kể hơn bộ nhớ hơn so với một con trỏ không)

EDIT

Newtype là một lớp. Xin lỗi vì đã không làm rõ điều đó.

Trả lời

5

Điều này tùy thuộc vào việc newType có phải là class (loại tham chiếu) hay struct (loại giá trị). Giải thích của bạn là chính xác cho các loại tham chiếu, nhưng các loại giá trị được sao chép toàn bộ, do đó danh sách sẽ tăng theo kích thước của loại giá trị của bạn khi bạn thêm các phần tử vào danh sách. Cũng lưu ý rằng danh sách ngày càng tăng sẽ không đồng nhất với các phần tử bổ sung, bởi vì nội bộ List phân bổ bộ nhớ theo khối, mong muốn chứa nhiều phần tử hơn.

+0

Vui lòng xem chỉnh sửa của tôi. Cảm ơn mặc dù! – carlbenson

+0

@CarlBenson Sau đó, bạn là chính xác - xem giải thích tuyệt vời của Andrew Hare về những gì đang xảy ra. – dasblinkenlight

2

Sẽ có rất ít chi phí vì bạn sẽ lưu trữ nhiều tham chiếu đến cùng một đối tượng. Danh sách chỉ lưu trữ các tham chiếu đến các đối tượng mà bạn thêm vào, các đối tượng được phân bổ ở nơi khác. Vì bạn đang thêm cùng một đối tượng nhiều lần, tất cả chúng sẽ trỏ đến cùng một đối tượng trên heap và chi phí duy nhất sẽ là các tham chiếu.

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