Nei tempi antichi, i processori non avevano istruzioni di stack e i linguaggi di programmazione non supportavano la ricorsione. Nel tempo, sempre più lingue scelgono di supportare la ricorsione e l'hardware ha seguito la suite con capacità di allocazione dello stack frame. Questo supporto è notevolmente cambiato nel corso degli anni con diversi processori. Alcuni processori hanno adottato i registri stack stack e / o stack pointer; alcune istruzioni adottate che avrebbero portato all'assegnazione dei frame di stack in una singola istruzione.
Mentre i processori avanzavano con cache a livello singolo, quindi a più livelli, un vantaggio fondamentale dello stack è quello della località cache. La cima dello stack è quasi sempre nella cache. Ogni volta che puoi fare qualcosa che ha una grande percentuale di cache, sei sulla strada giusta con i processori moderni. La cache applicata allo stack significa che le variabili locali, i parametri, ecc. Sono quasi sempre nella cache e godono del più alto livello di prestazioni.
In breve, l'utilizzo dello stack si è evoluto sia nell'hardware che nel software. Esistono altri modelli (ad esempio, il calcolo del flusso di dati è stato provato per un lungo periodo), tuttavia, la localizzazione dello stack lo rende molto efficace. Inoltre, il codice procedurale è proprio ciò che i processori vogliono, per le prestazioni: un'istruzione che dice cosa fare dopo l'altro. Quando le istruzioni sono fuori dall'ordine lineare, il processore rallenta tremendamente, almeno fino ad ora, dal momento che non abbiamo capito come rendere l'accesso casuale veloce come l'accesso sequenziale. (A proposito, ci sono problemi simili ad ogni livello di memoria, dalla cache, alla memoria principale, al disco ...)
Tra le prestazioni dimostrate delle istruzioni di accesso sequenziale e il comportamento di caching vantaggioso dello stack di chiamate, abbiamo, almeno attualmente, un modello di prestazioni vincente.
(Potremmo anche lanciare la mutevolezza delle strutture dati nelle opere ...)
Questo non significa che altri modelli di programmazione non possano funzionare, specialmente quando possono essere tradotti nelle istruzioni sequenziali e nel modello di stack di chiamata dell'hardware di oggi. Ma c'è un netto vantaggio per i modelli che supportano dove si trova l'hardware. Tuttavia, le cose non sono sempre le stesse, quindi abbiamo potuto vedere dei cambiamenti in futuro, poiché le diverse tecnologie di memoria e transistor consentono un maggiore parallelismo. È sempre una battuta tra i linguaggi di programmazione e le capacità hardware, quindi vedremo!