Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


allocazione in memoria, Slide di Fondamenti di informatica

sintesi dell'allocazione in memoria

Tipologia: Slide

2024/2025

Caricato il 08/03/2026

alessandro-mazza-31
alessandro-mazza-31 🇮🇹

1 documento

1 / 4

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Allocazione in memoria
La memoria allocata ad un processo è divisa in varie sezioni:
text section comprende il codice del programma compilato, che viene
letto quando il programma è lanciato; è a sola lettura.
data section memorizza le variabili globali e statiche, allocate e
inizializzate prima dell’esecuzione del main;
heap è utilizzata per l’allocazione dinamica della memoria, ed è gestita
attraverso chiamate come malloc(), free(), etc.
stack è gestita come una pila (last-in-first-out), usata per le variabili
locali: viene liberato quando diventano out-of-scope (variabili
automatiche) e per i parametri formali ed i valori di ritorno delle funzioni:
viene liberato quando si ritorna dall'invocazione.
Stack and heap (uso)
Stack ed heap partono da locazioni opposte dello spazio disponibile per il
processo, e crescono in direzioni opposte
Nel caso di sovrapposizioni, si verifica uno stack overflow (se fallisce
un'allocazione statica/automatica) oppure una chiamata a malloc può
fallire per memoria insufficiente - out of memory
NOTA: ci sono molte varianti di comportamento di sistemi operativi, per es.
linux fa optimistic allocation con OOM-killer
Lo stack è gestito tramite i registri della CPU (rapido!) con politica LIFO
(no buchi).
Lo heap è gestito tramite funzioni di libreria, che invocano chiamate di
sistema: è il sistema operativo a gestire la memoria; lo spazio è soggetto
a frammentazione (potenziale spreco di memoria, lento)
allocazione della memoria variabili
I compilatori C considerano 3 diversi tipi di allocazione della memoria: 2
per le variabili (allocazione statica, automatica), ed 1 tramite puntatori
(allocazione dinamica). Per le variabili si parla di storage class che può
essere static o automatic
pf3
pf4

Anteprima parziale del testo

Scarica allocazione in memoria e più Slide in PDF di Fondamenti di informatica solo su Docsity!

Allocazione in memoria

La memoria allocata ad un processo è divisa in varie sezioni:  text section comprende il codice del programma compilato, che viene letto quando il programma è lanciato; è a sola lettura.  data section memorizza le variabili globali e statiche, allocate e inizializzate prima dell’esecuzione del main;  heap è utilizzata per l’allocazione dinamica della memoria, ed è gestita attraverso chiamate come malloc(), free(), etc.  stack è gestita come una pila (last-in-first-out), usata per le variabili locali: viene liberato quando diventano out-of-scope (variabili automatiche) e per i parametri formali ed i valori di ritorno delle funzioni: viene liberato quando si ritorna dall'invocazione.

Stack and heap (uso)

Stack ed heap partono da locazioni opposte dello spazio disponibile per il processo, e crescono in direzioni opposte  Nel caso di sovrapposizioni, si verifica uno stack overflow (se fallisce un'allocazione statica/automatica) oppure una chiamata a malloc può fallire per memoria insufficiente - out of memory NOTA: ci sono molte varianti di comportamento di sistemi operativi, per es. linux fa optimistic allocation con OOM-killer  Lo stack è gestito tramite i registri della CPU (rapido!) con politica LIFO (no buchi).  Lo heap è gestito tramite funzioni di libreria, che invocano chiamate di sistema: è il sistema operativo a gestire la memoria; lo spazio è soggetto a frammentazione (potenziale spreco di memoria, lento) allocazione della memoria variabili I compilatori C considerano 3 diversi tipi di allocazione della memoria: 2 per le variabili (allocazione statica, automatica), ed 1 tramite puntatori (allocazione dinamica). Per le variabili si parla di storage class che può essere static o automatic

L'allocazione statica avviene quando si dichiara una variabile globale o statica (static). Ogni variabile statica o globale individua un blocco di memoria di dimensioni fisse. Lo spazio viene allocato quando il programma viene avviato e non viene mai deallocato, fino a fine del programma.  L'allocazione automatica avviene quando si dichiara una variabile automatica, che è un parametro di funzione o una variabile locale. Lo spazio per una variabile automatica viene allocato quando si entra nel blocco di codice contenente la dichiarazione e viene deallocato quando si esce da quel blocco di codice. (ricordiamo: un blocco di codice è individuato dalle parentesi graffe {...} ) In alcuni compilatori (es. GNU C) variabili con storage automatico possono avere come dimensione una variabile (Variable Length Arrays); In altre implementazioni di C, deve essere un valore letterale. Allocazione memoria dinamica L'allocazione dinamica della memoria è una tecnica in cui i programmi decidono, durante l'esecuzione, dove memorizzare alcune informazioni.  L'allocazione dinamica è necessaria quando la quantità di memoria richiesta, o la durata per cui occorre, dipendono da fattori non noti prima dell'esecuzione del programma.  L'allocazione dinamica non è supportata dalle variabili C; non esiste una classe di storage "dinamica", e non può esistere una variabile C il cui valore sia memorizzato in uno spazio allocato dinamicamente.  L'unico modo per fare riferimento a uno spazio di memoria allocato dinamicamente è tramite un puntatore. Attenzione: un puntatore è una variabile, con la sua storage class, e suo scope (e quindi sua durata nell'esecuzione del programma). La possibilità di accedere (e liberare) la memoria allocata dinamicamente dipende dall'esistenza e visibilità di un puntatore che vi fa riferimento. Gestione della memoria dinamica Con i puntatori, ed utilizzando funzioni della libreria standard, è possibile allocare dinamicamente la memoria:  L'allocazione dinamica va effettuata esplicitamente. Bisogna invocare una funzione o una macro per allocare spazio, specificando la dimensione tramite un argomento.  Per liberare lo spazio (deallocazione), si invoca un'altra funzione o macro usando il puntatore. dimenticare di deallocare la memoria che non serve più può portare a memory leak (esaurimento graduale della memoria, con conseguente crash dei programma)