Organizzazione della memoria dei campi e StructLayoutAttribute
Pubblicato da Emanuele su Maggio 8, 2008
Anche se non sembra, internamente il CLR esegue un sacco di lavoro sul codice che scriviamo.
Uno di questi lavori è l’ordinamento delle celle di memoria dei campi di un tipo (valore o riferimento).
CLR infatti, per ottimizzare le prestazioni può decidere di ragruppare le celle di memoria delle variabili di strutture o classi in diversi modi, per esempio in ordine sequenziale oppure compressi in campi dello stesso tipo.
Di default questa ottimizzazione avviene solo per le classi e non per le strutture. Questo per un semplice motivo: le strutture sono spesso usate per l’interoperabilità con codice un-managed, e per questo l’ordine dei suoi campi in memoria deve rimanere invariato.
Quando però siamo sicuri che la struttura che stiamo scrivendo è destinata solo a codice managed, sarà possibile ignorare questa impostazione sfruttando l’attributo StructLayoutAttribute.
[StructLayoutAttribute(LayoutKind.Auto)]
public struct Struct
{
int intero;
string stringa;
}
In questo caso si forza CLR a ottimizzare lo spazio di memoia della struttura.