Gli array statici sono comodi. Li dichiari, loro si siedono lì e preghi di non aver sbagliato a indovinare la taglia. Ma cosa succede quando cambia l’input? È qui che entrano in gioco le strutture dati dinamiche. Crescono e si riducono su richiesta, estraendo memoria dall’heap esattamente quando ne hai bisogno e restituendola quando non ti serve.

In C, questa non è solo una comodità. È una necessità per controllare il consumo di memoria. Non stai solo archiviando dati; stai gestendo lo spazio fisico che occupa.

Come l’heap alimenta l’allocazione flessibile della memoria

Pensa all’heap come a un pool condiviso. A differenza dello stack, che è rigido e veloce, l’heap è flessibile ma richiede una gestione manuale. Le strutture dati dinamiche funzionano prelevando blocchi da questo heap come richiesto. Non si siedono semplicemente uno accanto all’altro nella memoria. Si collegano insieme utilizzando puntatori, formando catene, alberi o elenchi.

Quando un blocco non è più necessario, ritorna nell’heap. Questo riciclaggio è fondamentale. Significa che non stai sprecando RAM su slot vuoti in un array di dimensioni fisse. Stai utilizzando solo ciò che il programma richiede in quel preciso secondo.

L’uso efficiente della memoria non significa risparmiare spazio. Si tratta di evitare l’incidente che accade quando lo finisci.

Per capire davvero come funziona, devi comprendere l’heap stesso. È il fondamento. Senza di esso, i puntatori sono solo riferimenti fluttuanti al nulla. Con esso, costruisci strutture che si adattano.