La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a. 2002-2003.

Presentazioni simili


Presentazione sul tema: "Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a. 2002-2003."— Transcript della presentazione:

1 Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a

2 Memoria Dinamica Le aree di memoria gestite dinamicamente a run-time sono: l’area di memoria stack l’area di memoria heap

3 Memoria Stack Nell’area di memoria stack, quando una funzione g viene chiamata da un altro programma, sono memorizzate le informazioni necessarie alla corretta esecuzione e ritorno di g. Elementi dello stack di una funzione

4 Memoria Stack Le informazioni memorizzate sono: gli argomenti passati alla funzione : una copia nel caso di chiamata per valore e l’indirizzo nel caso di chiamata per riferimento. Le variabili locali automatiche (descrittore e indirizzo) l’indirizzo dell’istruzione del chiamante immediatamente successiva alla chiamata (indirizzo di ritorno o di rientro) il link dinamico, che è il puntatore allo stack del programma chiamante il valore di ritorno se la funzione non è void

5 Memoria Stack Se main( ) chiama f1( ), viene allocato sullo stack di main lo stack di f1; quando f1 chiama f2( ), viene allocato sullo stack di f1 lo stack di f2 e così via fino alla chiamata ad f3 da parte di f2. Stack di f3(..) Stack di f2(..) Stack di f1(..) Stack di main Lo stack di una funzione viene rimosso quando termina la sua esecuzione.

6 Memoria Heap Lo heap è la regione di memoria le cui porzioni sono dinamicamente allocate (allocazione dinamica della memoria) o de-allocate su richiesta del programma. L’allocazione dinamica della memoria avviene tramite l’operatore new La de-allocazione avviene tramite l’operatore delete

7 Operatore new L’operatore new consente di allocare uno o più oggetti nell’area heap e ne restituisce l’indirizzo var_ptr = new tipo_var; viene allocato in var_ptr l’indirizzo di un oggetto di tipo tipo_var var_ptr = new tipo_var [size]; viene allocato in var_ptr l’indirizzo del primo di size oggetti di tipo tipo_var.Gli oggetti vengono sistemati consecutivamente nell’area heap Se non vi è memoria disponibile, new genera una eccezione (anche se lo Standard ammette il valore NULL in questo caso e alcuni compilatori lo restituiscono )

8 Operatore new Es: int *p = new int; alloca un oggetto int nella memoria heap e inizializza il puntatore p con l’indirizzo di tale oggetto struct ana {…...}; ana *p; p = new ana [50]; alloca 50 oggetti di tipo ana e restituisce in p l’indirizzo del primo oggetto creato.

9 Operatore delete L’operatore delete dealloca la memoria heap puntata dall’operando int *p = new int; // allocazione delete p; // deallocazione Se occorre deallocare un’area di memoria in cui sono stati allocati più oggetti, occorre usare l’istruzione delete[ ]. Es. ana *p = new ana [100]; delete [ ] p;

10 Operatore delete L’operatore delete è l’unico che può deallocare memoria heap che altrimenti sopravvive fino alla fine del programma senza poter essere utilizzata. int a, *p = new int; // allocazione p = &a; L’oggetto int nell’area heap non può più essere utilizzato !!!!


Scaricare ppt "Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a. 2002-2003."

Presentazioni simili


Annunci Google