Funzione (informatica): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Implementazione: stile |
No2 (discussione | contributi) →Implementazione: vPila (informatica)| |
||
Riga 92:
== Implementazione ==
Nella programmazione le funzioni sono uno strumento talmente importante e diffuso da richiedere una gestione della loro esecuzione estremamente efficiente allo scopo di mantenere bassi i tempi di chiamata della funzione e di ritorno del controllo al programma chiamante. Per questo motivo la gestione dell'allocazione delle variabili locali e del passaggio dei parametri vengono normalmente supportate direttamente dall'[[hardware]]. L'esistenza dello [[Pila (informatica)|stack]] nelle architetture hardware è appunto riconducibile alla necessità di supportare efficientemente le funzioni. Infatti, quando viene invocata una funzione il punto del codice in cui è stata invocata viene salvato sullo stack (indirizzo di ritorno), e anche i parametri e le variabili locali di una funzione vengono salvati sullo stack.
L'insieme di questi dati sullo stack è detto ''record'' di attivazione, e rappresenta una funzione in fase di esecuzione, che può essere sospesa in attesa del completamento di un'altra funzione che a sua volta ha invocato.
Riga 101:
In [[assembly]] esistono funzioni dedicate al supporto delle funzioni e dello stack, con un corrispondente diretto nel linguaggio macchina:
* PUSH: metti un valore sullo [[Pila (informatica)|stack]]
* POP: leggi e togli dallo stack un valore
* JSR: jump to subroutine, ovvero salta ad una subroutine (salvando l'indirizzo di ritorno sullo stack con PUSH)
|