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.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- ma dove vai se il var non ..., il 19 luglio 2006 alle 14:47
- DLINQ volume due, il 15 settembre 2005 alle 15:43
- DLinq mi piace , il 15 settembre 2005 alle 10:19
- ancora stringhe, il 21 dicembre 2004 alle 15:24
- in parziale rettifica o precisazione di quanto detto(...), il 13 dicembre 2004 alle 08:00
- interfacce, implementazioni esplicite, l'1 dicembre 2004 alle 14:12