2011-01-18 35 views
6

Tôi có thể tưởng tượng câu hỏi này đã được hỏi hàng ngàn lần, nhưng tôi không có nhiều may mắn trong việc tìm kiếm câu trả lời, cộng với điều này là nhiều hơn tò mò hơn so với nhu cầu.Các loại giá trị trong đối tượng được lưu trữ trong heap?

Đào vào các hạt và bu lông của C#, tôi đã tự hỏi vì các đối tượng được lưu trữ trong heap, là các loại giá trị trong các đối tượng được lưu trữ trong heap hay chúng được đặt trong ngăn xếp?

Trả lời

6

Chúng được lưu trữ trong heap, bên trong bộ nhớ được phân bổ cho loại tham chiếu. Ngoài ra, value types are often stored in places other than "the stack". Tuy nhiên, đặc tả CLI không xác định nơi mà bộ nhớ lưu trữ các loại giá trị cư trú - đó là một chi tiết triển khai không quan trọng.

+0

Bài viết tuyệt vời, cảm ơn bạn! – BoredOfBinary

3

Chúng được lưu trữ trên heap, với chính các đối tượng. Một cách tốt để suy nghĩ về điều này là khi một đối tượng (có kiểu giá trị như là một phần của trạng thái của nó) được cấp phát trên heap, các kiểu giá trị của nó phải sống ở đó, nếu không thì các loại giá trị đó sẽ biến mất ngay sau khi chồng cho mã đã tạo đối tượng.

1

Có, chúng được lưu trữ như một phần của đống. Tuy nhiên, đó là tất cả các chi tiết thực hiện, như Eric Lippert đã mô tả trong nhiều dịp. Tôi khuyên bạn nên đọc các bài đăng trên blog của mình về nó, this là bài đăng gần đây nhất và thesetwo cũng rất quan trọng.

+0

Bài viết tuyệt vời, Cảm ơn bạn! BTW Tình yêu cuốn sách của bạn, xảy ra để được đọc nó ngay bây giờ! – BoredOfBinary

9

Andrew Hare là đúng. Để biết chi tiết đầy đủ, hãy xem Eric Lippert's blog entry:

Tôi bị xáo trộn bởi huyền thoại rằng "loại giá trị đi trên ngăn xếp" ... Thường được ghi không chính xác: tuyên bố phải là "loại giá trị có thể được lưu trữ trên ngăn xếp ", thay vì các loại giá trị" phổ biến hơn "luôn được lưu trữ trên ngăn xếp".

+1

+1 để trích dẫn "Tôi bị xáo trộn bởi huyền thoại .." – Gabe

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