L'heap e lo stack sono fondamentalmente aree di memoria che vengono utilizzate per esempio al momento dell'istanza di una classe. Al momento dell'istanza di una classe, viene riservato uno spazio di memoria gestibili tramite lo heap o lo stack.
Heap utilizza un'allocazione dinamica. Quando cancelliamo una parte del programma, lo spazio non viene perso e può essere riutilizzato tramite l'utilizzo di un puntatore.
Lo Stack invece ha una struttura simile alla pila e utilizza il metodo LIFO (Last In, First Out). In questo caso parliamo di un allocazione statica, ovvero, lo spazio non può più essere recuperato.