2012-01-21 16 views
11

Qual è il layout di memoria di una classe CLR?Layout memoria classe CLR

Proveniente da uno sfondo C++, il layout di memoria di una classe C++ con funzioni virtuali inizia con un puntatore v-table, quindi i membri di dati della classe seguono in memoria.

Le classi CLR con funzioni virtuali hanno un puntatore v-table? Questo puntatore è il primo campo nel layout della memoria di classe? Ci sono campi aggiuntivi in ​​un layout di memoria di classe CLR oltre ai membri di dati definiti dai programmatori? E cosa rappresentano questi campi extra?

+0

il layout di memoria delle classi C# viene in genere determinato dal JITTER e quindi manifestato solo in fase di esecuzione (sebbene vi siano alcune eccezioni). – Yahia

+3

C# non ha nulla da dire sul layout della memoria. Questo riguarda le classi CLR. –

+0

Se vuoi vedere il VTable in un modo più pratico, puoi seguire post come questo per eseguire il comando '! DumpMT -MD address' su WinDbg, https://blogs.msdn.microsoft.com/kristoffer/2007/ 01/02/setting-a-breakpoint-in-managed-code-using-windbg/ –

risposta

9

È specifico dell'implementazione, ma this article fornisce una descrizione di ciò che era presente nell'implementazione di Microsoft .NET, per CLR v2. I sospetto è lo stesso per CLR v4, ma non potevo garantirlo. Cerca una sezione chiamata "ObjectInstance" per i dettagli, ma potresti trovare interessante l'intero articolo.

Secondo l'articolo, ci sono fondamentalmente due bit di intestazione: il blocco di sincronizzazione che viene utilizzato per il bloccaggio e il tipo riferimento che è fondamentalmente un puntatore a dati (compreso il vtable).

+0

Grazie! L'articolo che mi hai indicato sembra quello che stavo cercando. –

+0

Questo link è rotto. :( –

+0

@MrAnderson: Rats - non so come trovarlo, purtroppo ... –

1

L'articolo originale "Jit and Run" è still around, as a chm file. Basta seguire le MSDN instructions per essere in grado di leggere:

Sulla maggior parte delle versioni di Windows è necessario salvare questi file sul macchina locale, e quindi sbloccare il file per leggerlo. Per sbloccare un file, fare clic destro su di esso e selezionare Proprietà, quindi selezionare il pulsante 'sblocco'. Il contenuto sarà quindi disponibile per leggere

Tuttavia, il venerabile Jon Skeet indovinato sbagliato - e il layout della memoria degli oggetti ha infatti cambiato. Sasha Goldstein fornisce un'indagine aggiornata (CLR v4) sul layout, here.

Problemi correlati