Qual è la dimensione di un riferimento a un oggetto in .NET? Varia tra la compilazione x86, x64 e/o AnyCPU?Quanto è grande un riferimento a un oggetto in .NET?
Se fa la differenza, sono personalmente interessato a C#.
Qual è la dimensione di un riferimento a un oggetto in .NET? Varia tra la compilazione x86, x64 e/o AnyCPU?Quanto è grande un riferimento a un oggetto in .NET?
Se fa la differenza, sono personalmente interessato a C#.
Il riferimento stesso è fondamentalmente un puntatore. 32 bit su un sistema operativo a 32 bit, 64 bit su un sistema operativo a 64 bit.
La dimensione dell'oggetto a cui si fa riferimento è più complicata.
Questo è quello che ho capito - volevo solo per assicurarmi che non ci fossero più cose all'interno del runtime – arootbeer
Mi chiedo perché 64-bit .net avrebbe usato un puntatore, piuttosto che un offset scalato in una tabella "oggetti"? Un offset scalato a 32 bit avrebbe dovuto essere sufficiente per la maggior parte delle applicazioni (le applicazioni che richiedono più di quattro miliardi di oggetti potrebbero utilizzare uno speciale modello di memoria "superumiducente") e penserei che il piccolo costo aggiuntivo dell'uso dell'indirizzamento di spostamento in scala sarebbe più compensato dal miglioramento della concorrenza della cache che risulterebbe dal fare riferimento a oggetti di dimensioni uguali. – supercat
@supercat, gli sviluppatori .NET possono scegliere di compilare la loro app in modalità a 32 bit e tutti i puntatori saranno a 32 bit. Questo è probabilmente il migliore per qualsiasi applicazione che non abbia bisogno di puntatori a 64 bit, che è la stragrande maggioranza delle applicazioni. –
Un riferimento oggetto è fondamentalmente un puntatore alla memoria che contiene gli attributi dell'oggetto. Di conseguenza, il riferimento è costituito da una sola parola del processore: 32 bit su piattaforme a 32 bit e 64 bit su x64.
C'è un modo per misurare la quantità di memoria che un ** oggetto * consuma? – Shimmy
Per determinare la dimensione del puntatore, è possibile utilizzare System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr))
o sizeof(IntPtr)
in un contesto non sicuro.
Edit:
Or IntPtr.Size
.
Non un duplicato - sto parlando del riferimento stesso – arootbeer
[vedi domanda relativa] [1] [1]: http://stackoverflow.com/questions/26570/sizeof-equivalent- per-reference-types –
possibile duplicato di [C# riferimento variabile allocazione mem] (http://stackoverflow.com/questions/489805/c-sharp-reference-variable-mem-allocation) – nawfal