Title: Linguaggi di Programmazione Secondo Semestre / 02 - Gestione della Memoria

Q: Tipi di allocazione (allocazione statica e dinamica)
A: **statica**: memoria allocata a tempo di compilazione
**dinamica**: memoria allocata a tempo d'esecuzione:
- pila: oggetti allocati con la politica LIFO
- heap: oggetti allocati deallocati in qualsiaso momento

Q: Def: Allocazione dinamica: pila
A: I segmenti di attivazione (frame) devono contenere:
Nel caso delle funzioni:
I nomi delle variabili normalmente non vengono memorizzati nel RdA e i riferimenti alle variabili locali sono sostituiti dal compilatore con un indirizzo relativo (o offset) rispetto ad una posizione fissa del RdA del blocco nel quale le variabili sono dichiarate
Frame Pointer: è il puntatore al'ultimo record di attivazione
Stack Pointer: è il puntatore alla prima posizione libera della memoria

Q: Gestione Statica della memoria nel caso delle procedure
A: Salvare tutte le funzioni staticamente non è efficiente:
1. nel caso della ricorsione
2. nel caso in cui il programma non usi tutte le funzioni a runtime

Procedure di inizializzazoine e di ritorno dalle procedure

Q: Memoria dinamica Heap
A: La memoria nella Heap, non può essere gestita in maniera LIFO come quella nella pila.
La nostra heap: è una ziona di memoria nella qulae dei blocchi di memoria possono essere allocati e deallocati in modo relativamente libero
I metodi di gestione della heap si dividono in:
- dimensione fissa
- dimensione variabile

Frammentazione interna e esterna

Q: Catena Statica
A: La catena statica è un metodo per accedere alle variabili definite fuori dal blocco, la catena statica è un puntatore nel Rda.
La gestione della catena statica a run-time è tra le operazioni svolte dalla sequenza di chiamata e dall'epilogo.
Secondo l'approccio più comunue al momento in cui si entra in un nuovo blocco il chiamante calcola il puntatore di catena statica del chiamato e quindi passa tale puntatore al chiamato

Tecnica del display

Scope dinamico:A-list

Scope dinamico: Tabella Centrale dell'Ambiente

Q: Blocchi di dimensione fissa
A: I blocchi sono di dimensione fissa abbastanza limitata, sono collegati attraverso una "linked list", questa implementazione ha lo svantaggio che è raro che allochi blocchi contigui.

Q: Blocchi di dimensione variabile
A: Serve a differenza dell'allocazione a dimensione fissa ad allocare blocchi di memoria continua.
Per questo si usano i blocchi a dimensione variabile, il problema è quello della frammentazione esterna (mentre i blocchi a dimensione fissa hanno il problema della frammentazione interna).
Le tecniche di allocazione di memoria tendono quindi a "ricompattare" la memoria libera, unendo blocchi liberi contigui, in modo tale da evitare la frammentazione esterna.
Per ottenere questo obiettivo possono essere richieste operazioni aggiuntive che appesantiscono la gestione e quindi riducono l'efficienza
## Unica lista libera
Quando viene richiesta l'allocazione d1 un blocco di n parole di memoria, le prime n paro le sono allocate e il puntatore all'inizio dello heap avanza dir,. Analogamente per le richieste successive, mentre i blocchi di memoria deallocati vengono collegati  in una lista libera. Quando si raggiunge la fine dello spazio di memoria dedicato allo heap si dovrà passare ad utiliz-zare lo spazio di memoria deallocato, e questo può essere fatto nei due modi seguenti.
## Liste libere multiple