Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] allocazione valore di ritorno di funzione

    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 ?

  2. #2
    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.
    lolide
    Java Programmer

    Informati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.