Boxing

di Marco Leoncini, in c#,

Non è stato facile iniziare a programmare, anche con alle spalle due esami all?università di informatica J (mai finita) riprendere con un ambiente di sviluppo evoluto come il Framevork e tentare di stare al passo non è stato (e non è) facile.

Da grande preciso ordinato, difficile è stato ricordarsi i nomi, CLR , tipi, metodi, classe, proprietà e così via?.ma tra le cose che più mi hanno incuriosito il Boxing e Unboxing, cosa si nasconde dietro questi due termini? Un semplice esempio

 

Int x = 3;

Object ob = x;

 

Viene da dire: cosa c?è di strano? il tipo Object è alla base di tutte le classi, anche i tipi valore, ma cosa succede esattamente? I tipi valore non entrano a fare parte del heap gestito (si trovano dello Stack del thread) e non sono inseriti nel Garbage Collector.

 

Quando il compilatore trova il seguente codice Object ob = x; genera automaticamente il codice IL necessario per inserirlo nel heap gestito e per ottenere un riferimento all?oggetto, questo meccanismo è chiamato Boxing, automatico per linguaggi come C# e VB ma non per il C++ con estensioni gestite.

 

Più precisamente viene allocata la memoria necessaria corrispondente alle dimensioni del tipo valore più overhead necessario a ?trasformarlo? in un oggetto, successivamente viene copiato il valore nella memoria appena allocata e viene restituito un riferimento all?indirizzo del oggetto.

 

Questo processo è oneroso in termini di prestazioni e si verifica più spesso di quanto si pensi, basta prendere per esempio un Arraylist , una collection generica di oggetti, in cui ogni volta che inseriamo un tipo valore (ad esempio una struttura) viene eseguito il Boxing, compromettendo le prestazioni dovute al Boxing al successivo Unboxing e al necessario casting quando recuperiamo il tipo valore.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese