Quando un certo compito deve essere svolto in diversi punti di un programma, di solito non è consigliabile ripetere lo stesso codice in ciascun punto. Questo non solo per una questione di efficienza e di concisione, ma soprattutto perché se poi si decidesse di fare una modifica a quel codice, bisognerebbe essere sicuri di effettuarla in tutti i punti del programma dove esso compare. Per evitare tale situazione, il codice, che chiameremo sottoprogramma, può essere messo in un solo posto e "richiamato" in tutti i punti del programma in cui il compito che esso svolge è richiesto. I sottoprogrammi fanno risparmiare spazio. Hanno anche altri vantaggi: facilitano la comprensione della struttura di un programma lungo e complesso, forniscono una segmentazione logica del problema e facilitano la correzione o la modifica del programma. Inoltre, molti sottoprogrammi possono essere utilizzati in altri programmi e passati ad altri programmatori. Nella maggior parte degli ambienti di programmazione sono disponibili delle intere librerie di questi sottoprogrammi di uso generale. Le modalità precise secondo le quali un sottoprogramma viene effettivamente richiamato dipendono dal linguaggio di programmazione e dall' architettura della macchina su cui viene eseguito. Essenzialmente però quello che deve accadere è che, arrivato al punto in cui deve essere eseguito il sottoprogramma, (punto di chiamata) il programma principale, salti a un punto di ingresso del sottoprogramma. Una volta che il sottoprogramma ha svolto il suo compito, sia cioè arrivato ad un punto di uscita, deve essere in grado di restituire il controllo al programma principale saltando all'istruzione immediatamente successiva al punto di chiamata. Per fare ciò, il programma principale dovrà scrivere in un luogo convenzionale le informazioni ad esso necessarie per riprendere il controllo una volta che il sottoporgramma abbia raggiunto un punto di uscita. Quando però ci si ritrova ad avere a che fare con sottoprogrammi annidati (uno dentro l'altro), sorge il problema di dove "scrivere" tutti gli indirizzi di ritorno, facendo distinzione tra "ritorno a sottoprogramma" e "ritorno a programma principale". Inoltre questo meccanismo per funzionare richiede di modificare il codice del programma che è in esecuzione. Pertanto, non potrà essere adottato quando il programma debba risiedere in un'area di memoria non modificabile (ROM o EPROM). Infine non sarà possibile scrivere sottoprogrammi ricorsivi, cioè che richiamano sè stessi, in quanto andrebbe perso l'indirizzo del punto di ritorno al programma principale. Questi sono alcuni dei motivi per cui tutti i microprocessori moderni supportano un altro meccanismo per la gestione delle chiamate di sottoprogrammi, che si basa sull' utilizzo di una struttura dati molto semplice, lo stack, che significa "pila" in inglese.
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.