jump to navigation

Organizzazione della memoria dei campi e StructLayoutAttribute Maggio 8, 2008

Posted by Whidbey in .Net, C#, CLR.
Tags: , ,
trackback

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.

Commenti»

No comments yet — be the first.