La heap e` una porzione della memoria che il kernel assegna a un programma in esecuzione e che termina all'indirizzo chiamato "Program break", e` una porzione di memoria dinamica di cui sottoporzioni sono allocate on demand a runtime dal programma in esecuzione, un programma puo` richiedere memoria al sistema operativo che non rientra entro i limiti del "Program break" e il kernel puo` accordare la richiesta finquando l'ammontare della memoria messa a disposizione del programma non arriva a RLIMIT su kernel linux ABI spostando il "Program break", la porzione di heap assegnata al programma puo` anche aumentare senza che ne sia richiesta l'inizializzazione al momento ma per avere una porzione di memoria libera e assicurata al programma con brk() e sbrk() , sempre linux ABI ma che non sono piu` standard unix in quanto deprecate dalla SUSv3, la grandezza della heap assegnata al programma puo` anche diminuire se una volta che free() e` chiamata su una porzione di heap questa e`:
1) abbastanza grande da giustificarne il rilascio al sistema
2) si trova a occupare una porzione di memoria entro i limiti del "program break" in una posizione contigua al limite superiore (cioe` non e` sparsa)
in caso contrario il rilascio fa solamente si` che quella porzione rilasciata sia marcata come disponibile per utilizzi futuri da parte del programma