.NET Heaps and Stacks Đây là cách xử lý triệt để cách chồng và đống hoạt động.
C# và nhiều ngôn ngữ OOP sử dụng chung khác sử dụng chung Xử lý không phải con trỏ cho tham chiếu trong ngữ cảnh này (C# cũng có khả năng sử dụng con trỏ!) mô hình phân tích cho các câu hỏi như thế này. Xem bài viết tuyệt vời của Eric Lippert về chủ đề này Handles are Not Addresses
Không thích hợp để nói rằng Handle là kích thước của con trỏ. (mặc dù tình cờ có thể giống nhau) Xử lý là bí danh cho các đối tượng, không bắt buộc chúng là một địa chỉ chính thức đối với một đối tượng.
Trong trường hợp này xảy ra CLR để sử dụng các địa chỉ thực sự cho xử lý: Từ liên kết ở trên:
... CLR thực sự không thực hiện tham chiếu đối tượng quản lý như địa chỉ các đối tượng thuộc sở hữu của nhà sưu tập rác , nhưng đó là chi tiết triển khai .
Vì vậy, có một tay cầm có lẽ là 4 byte trên một kiến trúc 32 bit, và 8 byte trên một kiến trúc 64 byte, nhưng đây không phải là "chắc chắn", và nó là không trực tiếp vì con trỏ. Nó đáng chú ý tùy thuộc vào việc thực hiện trình biên dịch và phạm vi địa chỉ được sử dụng một số loại con trỏ có thể khác nhau về kích thước.
Với tất cả ngữ cảnh này, bạn có thể mô hình hóa điều này bằng cách tương tự con trỏ, nhưng điều quan trọng là phải nhận ra Handles không bắt buộc phải là địa chỉ. CLR có thể chọn để thay đổi điều này nếu nó muốn trong tương lai và người tiêu dùng của CLR không nên biết bất kỳ tốt hơn.
Một ổ cuối cùng của điểm tinh tế này:
Đây là một C# Pointer:
int* myVariable;
Đây là một C# Xử lý:
object myVariable;
Họ là không giống nhau.
Bạn có thể làm những việc như toán trên con trỏ, mà bạn không nên làm với Xử lý. Nếu xử lý của bạn xảy ra được thực hiện giống như một con trỏ và bạn sử dụng nó như thể nó là một con trỏ bạn đang sử dụng sai Handle trong một số cách mà có thể giúp bạn gặp rắc rối sau này.
Nguồn
2012-02-29 02:21:21
Lưu ý rằng những câu hỏi này là tất cả các chi tiết triển khai (có thể thay đổi,) và không thực sự về C#, mà đúng hơn là về .NET CLR. – dlev
Chopperdave, câu hỏi thú vị nhưng tôi muốn hỏi xem bạn có hỏi ý bạn không - Một tham chiếu đối tượng phần lớn là con trỏ và đó chỉ là 'số' tùy thuộc vào kiến trúc của hệ thống mà mã của bạn đang chạy. Nếu bạn hỏi về cách phân bổ. Heap của Net hoạt động, đó là một con thú hoàn toàn khác. –
Chỉ muốn thêm, không có xúc phạm dự định ở đây, tôi không cố gắng ngụ ý rằng bạn không biết ý bạn là gì - Điều này là, trong đó .Net đây là một câu hỏi mơ hồ và nó sẽ giúp người dùng trong tương lai trên Stack Tràn để biết chính xác bối cảnh mà chúng ta đang nói đến. –