Oltre alle dimensioni (lo stack è grande in tutto qualche MB su sistemi operativi "normali", e se superi il limite il programma va in crash) c'è un'altra differenza importante: lo stack "forza" un determinato lifetime (ovvero, le variabili che dichiari locali ad una funzione esistono solo finché questa non ritorna), mentre l'allocazione sull'heap fornisce memoria che decidi tu quando deallocare. Questo per tante strutture dati (ad esempio, liste linkate) o in generale quando devi allocare dati che devono sopravvivere più a lungo della funzione corrente è fondamentale.