Call stack: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
→Scopi del call stack: correzione link heap |
||
Riga 18:
Un call stack può avere scopi aggiuntivi, dipendenti dal linguaggio, dal sistema operativo e dall'ambiente della macchina. Tra questi:
* '''immagazzinare dati locali''' - Una subroutine frequentemente necessita di spazio di memoria per registrare i valori delle variabili locali, le variabili usate solo nella subroutine attiva e che non devono trattenere valori dopo il ritorno (alla funzione chiamante). È spesso conveniente per allocare spazio per questo uso spostarsi semplicemente in cima allo stack in modo sufficiente ad avere lo spazio. È molto veloce paragonato con, ad esempio, con l'allocazione di tipo [[Allocazione_dinamica_della_memoria|heap]]. Ogni diversa attivazione di una subroutine ha il proprio spazio separato nello stack per i dati locali.
* '''passaggio di parametri''' - Le subroutine spesso richiedono che i valori dei parametri siano forniti dal codice che le chiama e non è raro che lo spazio per questi parametri possa essere nel call stack. Generalmente se ci sono solo pochi piccoli parametri, i registri del [[processore]], possono essere usati per il passaggio dei valori, ma se ci sono più parametri da gestire in questo modo, è necessario spazio in memoria. Il call stack lavora meglio come posto per questi parametri, specialmente poiché ogni chiamata della subroutine, che avrà diversi valori dei parametri, avrà uno spazio separato nel call stack per questi valori.
Riga 75:
The mixing of control flow data affecting the execution of code (return addresses, saved frame pointers) and simple program data (parameters, return values) in a call stack is a security risk, possibly [[exploit (computer security)|exploit]]able through [[buffer overflow]]s (in which article the risk and exploitation are explained).
-->
== Voci correlate ==
* [[Stack]]
|