.NET e memoria

martedì 07 agosto 2007 - 22.23

mrah Profilo | Newbie

Ciao a tutti,

domanda banale (e forse un po' vaga): qualcuno sa dirmi dove (heap/stack) il "common language runtime" di .net alloca gli oggetti (inteso proprio come istaza di una classe). Eventulmente qualche buon articolo o presentazione.

grazie in anticipo....

ulisse1969 Profilo | Newbie

In .NET gli oggetti vengono allocati in memoria a seconda del tipo a cui appartengono. In particolare i tipi di dati valore vengono allocati nello stack mentre i tipi di dati riferimento vengono allocati nel managed heap. Per chiarire, un intero viene allocato nello stack mentre una classe alloca un riferimento all'istanza della classe nello stack mentre nel managed heap alloca l'istanza della classe vera e propria.
Come articoli sul web ce ne sono abbastanza non sò quale consigliarti. Io personalmente uso un libro che ho acquistato.
Spero di averti aiutato un pò.

Ciao.

Brainkiller Profilo | Guru

>domanda banale (e forse un po' vaga): qualcuno sa dirmi dove
>(heap/stack) il "common language runtime" di .net alloca gli
>oggetti (inteso proprio come istaza di una classe). Eventulmente
>qualche buon articolo o presentazione.

Ciao,
ci sono testi ad hoc per studiare internamente il CLR.
Per esempio quelli di Jeffrey Richter:

- Applied Microsoft .NET Framework Programming (un po' datato ma molto buono)
- CLR via C#, Second Edition

Il primo votato su Amazon 4,5 stelle e il secondo 5 stelle su 32 reviews.

Altro materiale specifico lo puoi trovare sui documenti elencati qui:
http://msdn2.microsoft.com/en-us/netframework/Aa569283.aspx

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

mrah Profilo | Newbie

grazie delle rispsote.
Ho gia' letto qualcosa ovviamente e vi ho posto la domanda perche' sono confuso. Per questo ho chiesto qualche buon riferimento. Mi serve solo per capire i concetti e per capire COME e QUALI unita' (unita' del CLR) intervengono quando si alloca sullo heap e sullo stack. Insomma come agiscono i meccanismi e quali sono... AD es: ho letto che i value type (presumo un Int ad esempio) sono allocati nello stack del Thread. Si tratta di codice non gestito. Ma cosa si intende esattamente per "stack del thread"?

Grazie

Brainkiller Profilo | Guru

>ho letto che i value type (presumo un Int ad esempio)
>sono allocati nello stack del Thread. Si tratta di codice non
>gestito. Ma cosa si intende esattamente per "stack del thread"?

Che ogni Thread ha il suo Stack.
Se non hai esperienza di programmazione e non sai cos'è e come funziona uno stack o call stack, dai una lettura qui:
http://en.wikipedia.org/wiki/Call_stack
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

mrah Profilo | Newbie

ciao,
ho letto quello consigliato da voi piu altri articoli; mi pare di capire che alcuni tipi sono designati ad essere allocati sullo stack ed altri sullo Heap; ho appreso che una classe viene allocata nello heap ed una struttura nello stack con la seguente particolarita' (di cio' chiedo conferma se ne avete voglia):
class myClassA {public int x} //sullo heap struct myClassB {public myClassA c} //sullo stack //myClassB cla = new myClassB() myClassB cla; // alloco sullo stack; questa è equivalente a quella sopra commentata
Ammesso che quello sopra vada bene, pare che per "forzare" l'allocazione di oggetti sullo stack si possa (per dire) usare questo trucco di inglobarlo in una struttura (ora arriva il mio quesito). Come posso allocare oggetti sullo stack? Esiste qualcuno che ci ha pensato ed ha proposto una soluzione al riguardo?

grazie.

mrah Profilo | Newbie

ciao, qualcuno potrebbe spiegarmi in C# quando vengono allocati i value type?
In base al codice del mio precedente post un intero inglobato dentro una classe è allocato sullo heap in quanto facente parte della classe;
quindi per quel poco che ho visto, in C# tutto è inglobato dentro le classi (o almeno è posibile). Perfino il main:
namespace Simple { class Program { static void Main(string[] args) { Console.WriteLine("questo "); int a = 0; myClass mc = new myClass(); } } }
Quando alloco sullo stack?La classe "Program", dove viene allocata??? Mi verrebbe da dire sullo heap ed anche tutto quello che ci sta dentro....
Spero qualcuno riesca a chiarirmi questo grave dubbio..

grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5