In alcuni linguaggi di programmazione, inclusi C e Pascal, un heap è un'area di memoria principale del computer pre-riservata (memoria) che un processo del programma può utilizzare per memorizzare i dati in una quantità variabile che non sarà nota fino a quando il programma non è in esecuzione. Ad esempio, un programma può accettare diverse quantità di input da uno o più utenti per l'elaborazione e quindi eseguire l'elaborazione su tutti i dati di input contemporaneamente. Avere una certa quantità di memoria heap già ottenuta dal sistema operativo semplifica il processo di gestione dello spazio di archiviazione ed è generalmente più veloce rispetto alla richiesta di archiviazione al sistema operativo ogni volta che è necessario. Il processo gestisce l'heap allocato richiedendo un "blocco" dell'heap (chiamato a blocco heap ) quando necessario, restituendo i blocchi quando non sono più necessari e facendo occasionalmente "raccolta dei rifiuti", che rende disponibili i blocchi che non vengono più utilizzati e riorganizza anche lo spazio disponibile nell'heap in modo che non venga sprecato in piccoli inutilizzati pezzi.
Il termine è apparentemente ispirato a un altro termine, stack. Uno stack è simile a un heap tranne per il fatto che i blocchi vengono estratti dalla memoria in un certo ordine e restituiti allo stesso modo. In Pascal, a subheap è una parte di un heap che viene trattata come uno stack.