Stack frame: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
aggiunto categorie e voci correlate Etichette: Rimozione di avvisi di servizio Modifica visuale |
m rimossa Categoria:Informatica usando HotCat |
||
(6 versioni intermedie di 6 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|dicembre 2019}}
In informatica, uno '''stack frame''' è una zona di memoria del [[call stack]] che contiene i dati necessari alla subroutine (o funzione) '''''attualmente in esecuzione'''''.
Esso ha, a sua volta, una struttura a [[Pila (informatica)|stack]] (pila) e contiene, alla sua base, i dati per ripristinare i registri puntatore del processore (come ad esempio i registri EBP e ESP nell'architettura [[IA-32]]), facendoli tornare all'istruzione immediatamente successiva alla chiamata della funzione in esecuzione, nel flusso del programma principale (o della funzione chiamante).
== Introduzione ==
Quando un programma compilato viene eseguito su un [[Computer|calcolatore]], questo deve allocare della memoria per la sua esecuzione.
La memoria per l'esecuzione è una porzione di memoria divisa in zone ([[Segmentazione (memoria)|segmentazione della memoria]]):
Line 14 ⟶ 15:
*[[Call stack|stack]] : utilizzato per tenere traccia dei punti in cui ogni subroutine attiva dovrebbe restituire il controllo quando termina l'esecuzione e per le variabili locali e parametri delle funzioni.
Lo stack (o [[Call stack|Call Stack]]) viene ulteriormente frammentato con l'utilizzo di stack frame,
== Funzionamento di esempio (architettura
Quando viene richiamata una funzione, diversi elementi vengono inseriti nello stack, in una struttura chiamata '''stack frame'''. il [[IA-32|registro]] EBP, chiamato talvolta ''frame pointer'' (FP) o ''
Ciascuno stack frame contiene i parametri della funzione, le sue variabili locali e due puntatori che sono necessari per ripristinare la situazione iniziale:
Line 24 ⟶ 25:
* l'indirizzo di ritorno
il SFP viene utilizzato per ripristinare EBP sul suo valore precedente, mentre l'indirizzo di ritorno serve ad impostare EIP (l'Instruction Pointer) all'indirizzo dell'istruzione immediatamente successiva a quella di richiamo della funzione.
Se una funzione venisse richiamata dall'interno di un'altra, un nuovo stack frame verrebbe inserito nello stack e il suo indirizzo di ritorno sarebbe l'indirizzo dell'istruzione successiva al richiamo della funzione chiamata, nella funzione chiamante.
==
<references/>▼
== Voci correlate ==
* [[Call stack
* [[IA-32]]
* [[linguaggio macchina]]
* [[Segmentazione (memoria)]]
{{portale|informatica}}
▲<references/>
[[Categoria:Microprocessori Intel]]
[[Categoria:Programmazione]]
[[Categoria:Gestione della memoria]]
|