Memoria Stack vs. Heap
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 31 di 63.
Quando il tuo programma C viene eseguito, usa due aree di memoria distinte: lo stack e l'heap. Capire la differenza tra queste aree di memoria è fondamentale per programmare efficacemente in C, soprattutto quando lavori con i puntatori e l'allocazione dinamica della memoria.
Lo stack viene usato per l’allocazione statica della memoria. È qui che vengono memorizzate le variabili locali, i parametri delle funzioni e le informazioni sulle chiamate di funzione. Lo stack è gestito automaticamente dal sistema: quando dichiari una variabile locale, la memoria viene allocata nello stack e, quando la variabile esce dal proprio ambito, quella memoria viene liberata automaticamente.
void function() {
int x = 10; // Allocato nello stack
char arr[100]; // Anch'esso allocato nello stack
// La memoria viene liberata automaticamente quando function termina
}Lo heap viene usato per l’allocazione dinamica della memoria. È un’area di memoria più ampia che puoi richiedere durante l’esecuzione del programma.
A differenza dello stack, l’heap richiede una gestione manuale: devi richiedere esplicitamente la memoria e poi liberarla quando hai finito. Questo ti dà più controllo, ma anche più responsabilità.
La differenza principale riguarda la gestione: la memoria stack è automatica e ha dimensioni limitate, mentre la memoria heap è manuale e molto più grande. Nelle prossime lezioni imparerai a lavorare con la memoria heap usando funzioni come malloc() e free().
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online