Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Record di attivazione java, Appunti di Fondamenti di informatica

Appunti università della calabria - ingegneria informatica

Tipologia: Appunti

2021/2022

In vendita dal 12/10/2019

erty89qs
erty89qs 🇮🇹

4.5

(6)

42 documenti

1 / 18

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
RECORD DI ATTIVAZIONE
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Anteprima parziale del testo

Scarica Record di attivazione java e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

RECORD DI ATTIVAZIONE

INVOCAZIONE DI FUNZIONI

 Ogni volta che viene invocata una funzione

  1. Si crea una nuova attivazione (istanza) della funzione
  2. Viene allocata la memoria per i parametri e per le variabili locali
  3. Si effettua il passaggio dei parametri
  4. Si esegue il codice della funzione

RECORD DI ATTIVAZIONE

 La dimensione del record di attivazione  varia da una funzione all’altra  per una data funzione, è fissa e calcolabile a priori

CICLO DI VITA DEL RECORD DI ATTIVAZIONE

 È creato ( allocato ) al momento dell’invocazione di una funzione  Permane per tutto il tempo in cui la funzione è in esecuzione  È distrutto ( deallocato ) al termine dell’esecuzione della funzione  Ad ogni chiamata di funzione viene creato un nuovo record, specifico per quella chiamata di quella funzione

SPAZI DI INDIRIZZAMENTO IN MEMORIA

Code segment : contiene il codice eseguibile  Data segment: contiene dati globali (comuni a tutte le funzioni)  Heap : contiene dati dinamici (creati durante l’esecuzione, ad esempio liste Python o array Java)  Stack : contiene i record di attivazione  Code segment e data segment sono di dimensione fissata staticamente  La dimensione dell'area associata a stack+heap è fissata staticamente  Man mano che lo stack cresce, diminuisce l'area a disposizione dell'heap e viceversa

RESTITUZIONE DEI RISULTATI

 Il valore restituito dalla funzione chiamata può essere restituito alla funzione chiamante in due modi

  1. Inserendo uno spazio aggiuntivo nel record di attivazione  In questo caso la funzione chiamante deve recuperare il risultato prima che il record venga distrutto
  2. Utilizzando un registro della CPU

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main()

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main() RA = (^) DL =  x =

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main() RA = (^) DL =  x =

RA = DL =

c = 10

RA = DL =

b = 10

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main() RA = (^) DL =  x =

RA = DL =

c = 10

RA = DL =

b = 10

RA = DL =

a = 10

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main() RA = (^) DL =  x =

RA = DL =

c = 10

RA = DL =

b = 10  f_b restituisce il valore 11  l’esecuzione si sposta al suo RA (in f_c)  viene eliminato il record di f_b

ESEMPIO

def f_a(a): return a+ def f_b(b): return f_a(b) def f_c(): c = 10 return f_b(c) def main(): x = f_c() main() RA = (^) DL =  x =

RA = DL =

c = 10  f_c restituisce il valore 11  l’esecuzione si sposta al suo RA (in main)  viene eliminato il record di f_c