Non Solo .Net

C#, C++, WPF, WCF e molto altro

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.

Lascia una Risposta

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>