stack
Letteralmente traducibile come pila o catasta, rappresenta insieme alla coda una delle due strutture lineari di dati che permettono di immagazzinare e rimuovere informazioni secondo un ordine prestabilito. Mentre la coda prevede una strategia di tipo FIFO (First in first out), secondo la quale il primo elemento inserito sarà anche il primo a essere prelevato (come accade, per es., in una fila a uno sportello), al contrario lo stack fa uso di una strategia di tipo LIFO (Last in first out), secondo la quale il primo elemento da prelevare è quello inserito per ultimo (come accade, per es., in una pila di fascicoli). Le tipiche operazioni che possono essere implementate su tali strutture da un programma sono l’inserimento (push) e la rimozione (pop). La strategia di tipo stack consente la gestione specifica di vari elementi architetturali dei calcolatori elettronici. A basarsi sulla strategia stack è, in particolare, una serie di operazioni gestite dal software di sistema per l’esecuzione di funzioni o subroutine. In tale contesto, l’esecuzione di un codice scritto in un dato linguaggio di programmazione di alto livello ricorre spesso alla cosiddetta call stack (pila delle chiamate), che rappresenta la struttura di dati che memorizza secondo una strategia a pila tutte le informazioni sulle subroutine attive in un certo periodo di tempo. L’impiego della call stack consente di controllare gli istanti di restituzione del controllo di ogni subroutine, una volta terminata l’esecuzione. La strategia a pila consente di avere in posizione prioritaria sempre l’indirizzo cui deve essere trasferito il controllo una volta terminata l’esecuzione della sub-routine attiva. Nel caso in cui tutto lo spazio riservato alla call stack fosse occupato, può verificarsi un errore detto stack overflow. Tale approccio ha notevoli vantaggi per la gestione dei task di ogni processo attivo istante per istante e rappresenta una struttura che solitamente non deve essere gestita direttamente dal programmatore del linguaggio di alto livello, essendo la sua implementazione un compito del compilatore e del sistema operativo.
→ Programmazione, linguaggi di