PDA

Visualizza la versione completa : [C++] allocazione valore di ritorno di funzione


Mr.Bloom
26-03-2012, 11:42
Ciao a tutti,
quando un programma ritorna da una funzinone int f() il call stack pointer viene portato all'altezza della funzione g che ha invocato f e la parte di memoria che era stata allocata nel call stack per f viene liberata. In questa zona di memoria ci sono le variabili passate per argomento da g a f, le variabili locali alla funzione f e l'indirizzo di ritorno (ovvero in quale punto di g ricominciare ad eseguire il programma una volta che f ritorna).


Mi chiedevo invece dove viene allocato il valore che f ritorna a g, in questo caso un int, ma eventualmente anche un oggetto.
Nell' area del call stack relativa a g ? nello heap ? nei registri ?

lolide
28-03-2012, 21:47
Quando chiami una funzione nello stack viene fatto il push dell'indirizzo di memoria dell'istruzione successiva alla chiamata della funzione, di TOT byte quant' la dimensione del tipo di ritorno della funzione che vengono lasciati vuoti, un puntatore speciale che viene usato per capire dove inizia l'area di allocazione di tutte le variabili locali della funzione e le variabili locali inclusi i parametri passati alla funzione.
QUando la funzione termina, viene copiato il valore di ritorno della funzione nello spazio lasciato vuoto nello stack e comincia il pop dei valori. Avviene il pop di tutti i byte dello stack fermandosi quando incontra quel puntatore speciale che identifica la fine di tutte le variabili locali, e tutti i byte poppati vengono distrutti.
Poi i byte di ritorno della funzione che stanno ancora nello stack vengono copiati nell'area puntata dalla variabile a cui assegni il valore di ritorno della funzione. Se non assegni il valore ad alcuna variabile, vengono cancellati.

In ultimo poppa l'indirizzo della prossima istruzione della funzione chiamante, sposta l'instruction pointer a quell'indirizzo e continua l'esecuzione.

Loading