Lo stack è una struttura cosiddetta "LIFO" (dall'inglese last in, first out, cioè "l'ultimo ad entrare è il primo ad uscire"), che prende il suo nome dal fatto che mantiene una serie di dati (nel caso dei sottoprogrammi gli indirizzi di ritorno al punto di chiamata) "impilati" uno sull' altro. Le uniche operazioni che si possono compiere su uno stack sono:
aggiungere un nuovo dato sopra agli altri già presenti, un'operazione che si chiama convenzionalmente push;
togliere dalla pila il dato che sta in cima, un' operazione che convenzionalmente si chiama pop.
Quando il programma principale chiama il sottoprogramma, aggiunge a uno stack l' indirizzo dell' istruzione successiva al punto di chiamata, quindi salta al punto di entrata del sottoprogramma. In seguito, quando il sottoprogramma raggiunge un punto di uscita, toglie dallo stack l' indirizzo a cui deve ritornare e quindi vi salta. In questo modo ad ogni chiamata annidata l'indirizzo di ritorno non sovrascrive quello della chiamata immediatamente più esterna. Si risolve anche il problema della modifica del codice del programma in esecuzione perché lo stack può essere mantenuto in un' area di memoria modificabile anche se il programma risiede in ROM. Infine, questo meccanismo rende possibile scrivere sottoprogrammi ricorsivi, in quanto l' indirizzo del punto di ritorno al programma viene mantenuto nello stack.
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.