.NET Heaps and Stacks Este es un tratamiento exhaustivo de cómo funcionan la pila y el montón.
C# y otros lenguajes de POO montón utilizan en el uso general de referencia jerga no trata los punteros de referencias en este contexto (C# también es capaz de usar punteros!) Analogías de puntero funcionan para algunos conceptos generales, pero esto conceptual modelo se descompone para preguntas como esta. Consulte la excelente publicación de Eric Lippert sobre este tema Handles are Not Addresses
No es apropiado decir que una Manija es del tamaño de un puntero. (aunque puede ser coincidentemente el mismo) Los identificadores son alias para objetos, no es necesario que sean una dirección formal de un objeto.
En este caso, el CLR pasa a utilizar las direcciones reales de los mangos: Desde el enlace de arriba:
... el CLR hace realmente poner en práctica las referencias de objetos gestionados como direcciones de objetos propiedad del recolector de basura , pero ese es un detalle de implementación .
Así que sí un mango es probablemente de 4 bytes en una arquitectura de 32 bits, y 8 bytes en una arquitectura de 64 bytes, pero esto no es un "seguro", y es no por el hecho de punteros. Vale la pena señalar que, según la implementación del compilador y , los rangos de direcciones utilizados algunos tipos de punteros pueden ser diferentes en tamaño.
Con todo este contexto, probablemente pueda modelar esto por analogía con un puntero, pero es importante tener en cuenta que los identificadores no requieren direcciones. El CLR podría elegir cambiar esto si quisiera en el futuro y los consumidores del CLR no deberían saber nada mejor.
Una última unidad de este punto sutil:
Este es un C# Puntero:
int* myVariable;
Este es un C# Mango:
object myVariable;
Ellos no son los mismos.
Puede hacer cosas como las matemáticas en los punteros, que no debe hacer con las asas. Si su identificador se implementa como un puntero y lo usa como si fuera un puntero, usted está haciendo un mal uso del Mango de alguna manera que podría ocasionarle problemas más adelante.
Tenga en cuenta que estas preguntas son todos los detalles de implementación (que están sujetos a cambios) y no realmente sobre C#, sino más bien sobre .NET CLR. – dlev
Chopperdave, buena pregunta interesante, pero quiero preguntar si estás preguntando qué querías decir: una referencia de objeto es básicamente un puntero y eso es solo un 'número' según la arquitectura del sistema en el que se ejecuta el código. Si está preguntando cómo funcionan las asignaciones de .Net Heap, esa es una bestia completamente diferente. –
Solo quería agregar, no hay insulto pretendido aquí, no estoy tratando de dar a entender que usted no sabe lo que quiere decir - El asunto es, es que en .Net esta es una pregunta ambigua y ayudará a los futuros usuarios de Stack Desbordamiento para saber exactamente de qué contexto estamos hablando. –