bbb65b611c02d20dba06b40c4cc1ebca18d20297
linguaggi/s02/20260226.md
| ... | ... | @@ -0,0 +1,107 @@ |
| 1 | +# Gestione memoria (slide 36) |
|
| 2 | + |
|
| 3 | +scrivi le def di regola di scope dinamico e statico in s02 |
|
| 4 | + |
|
| 5 | +### Il display |
|
| 6 | + |
|
| 7 | +Alternativa alla catena statica per implementare scope statico (e' piu veloce ma richiede mem in piu (per l'array)) |
|
| 8 | + |
|
| 9 | +Si puo ridurre il costo h ad una costante usando la tecnica del display |
|
| 10 | + |
|
| 11 | +- la catena statica viene rappresentata mediante un array |
|
| 12 | + - i-esimo elem dell array = punt all'RdA del sottoprogramma di livello di annidamento i attivo per ultimo |
|
| 13 | +- quindi: - `Display[1]=RdA` di una proc P di top level - `Display[2]=RdA` di una proc Q dichiarata in P - ... - `Display[2]=RdA` della proc attiva in questo momento (dichiarata dentro quella che si trova in `Display[i-1]`) |
|
| 14 | + |
|
| 15 | +Se il sottoprogramma corrente è annidato a livello i, un oggetto che è in uno scope esterno di h livelli può essere trovato guardando il punt a RdA nel display alla posizione j = i - h |
|
| 16 | + |
|
| 17 | +Esempio: |
|
| 18 | + |
|
| 19 | + |
|
| 20 | +Se proc corrente annidata a livello i, lo scope esterno di h livelli si ottiene in `Display[i - h]` |
|
| 21 | +Con Display in memoria un oggetto è trovato con due accessi, uno per il display e uno per l’oggetto |
|
| 22 | + |
|
| 23 | + |
|
| 24 | + |
|
| 25 | + |
|
| 26 | +Display o catena statica ? |
|
| 27 | +• Rari annidamenti di profondità > 3, quindi lunghezza max di catena statica = 3 |
|
| 28 | +• Tecniche di ottimizzazione possono migliorare gli accessi alle catene usate più frequentemente (tenendo nei registri i puntatori) |
|
| 29 | +• Il display è più costoso da mantenere della catena statica nella sequenza di chiamata ... |
|
| 30 | +• Conclusione: display poco usato nelle implementazioni moderne… |
|
| 31 | + |
|
| 32 | +### Scope dinamico |
|
| 33 | + |
|
| 34 | +Con scope dinamico l’associazione nomi-oggetti denotabili dipende |
|
| 35 | +– dal flusso del controllo a run-time |
|
| 36 | +– dall’ordine con cui i sottoprogrammi sono chiamati - La regola generale è semplice: l’associazione corrente per un nome è quella determinata per ultima nell’esecuzione (non ancora distrutta). |
|
| 37 | + |
|
| 38 | +Implementazione ovvia: |
|
| 39 | + |
|
| 40 | +- Memorizzare i nomi negli RdA |
|
| 41 | +- Ricerca per nome risalendo la pila |
|
| 42 | +- Esempio: chiamate A,B,C,D |
|
| 43 | + |
|
| 44 | + |
|
| 45 | + |
|
| 46 | +Variante: A-list |
|
| 47 | +Le associazioni sono memorizzate in una struttura apposita (manipolata come una pila) |
|
| 48 | +Es: chiamate A B C D |
|
| 49 | + |
|
| 50 | +(in grigio le associazioni non attive) |
|
| 51 | +In pratica se ho x a livello A e x al livello B, quando parto da B o da sotto B risalendo trovo x(x deve essere attiva = visibile dal blocco corrente) |
|
| 52 | +quando mi sposto (es da A a C) devo rendere non visibili le var di altri blocchi (es. B non e' visibile da C o D) |
|
| 53 | + |
|
| 54 | +Per ogni record che alloco sulla pila devo esplicitare le var visibili |
|
| 55 | +nei libri la regola di visibilita' viene prima della regola di scope (nella realta' dipende) |
|
| 56 | + |
|
| 57 | +le associazioni non visibili lo sono per due casi: |
|
| 58 | + |
|
| 59 | +1. sono state riscritte |
|
| 60 | +2. sono invisibili secondo la regola di visibilita' |
|
| 61 | + |
|
| 62 | +Costi delle A-list |
|
| 63 | + |
|
| 64 | +- Molto semplice da implementare |
|
| 65 | +- Occupazione mem (nomi presente esplicitamente) |
|
| 66 | +- costo di gestione (ingresso uscita da blocco e inserzione rimozione blocchi dalla pila) |
|
| 67 | +- tempo di accesso (lineare nella profondita della a list) |
|
| 68 | + |
|
| 69 | +Possiamo ridurre il tempo d’accesso medio, aumentando il tempo di ingresso/uscita da blocco.. |
|
| 70 | + |
|
| 71 | +#### Tabella centrale dei riferimenti, CRT |
|
| 72 | + |
|
| 73 | +evita le lunghe scansioni delle A list |
|
| 74 | +una tabella mantiene tutti i nomi distinti del programma |
|
| 75 | + |
|
| 76 | +- se i nomi sono noti statitcamente si puo accedere all elemento della tabella in tempo costante |
|
| 77 | +- altrimenti accesso hash |
|
| 78 | + |
|
| 79 | +Ad ogni nome e' associata la lista delle associazioni di quel nome |
|
| 80 | + |
|
| 81 | +- la piu recente e' la prima |
|
| 82 | +- le altre (disattivate) seguono |
|
| 83 | + |
|
| 84 | +Tempo di accesso costante |
|
| 85 | + |
|
| 86 | + |
|
| 87 | + |
|
| 88 | + |
|
| 89 | + |
|
| 90 | +nell'ultima tabella v e'dichiarato non visibile (0) |
|
| 91 | + |
|
| 92 | +#### Costi della CRT |
|
| 93 | + |
|
| 94 | +Gestione più complessa di A-list |
|
| 95 | +Meno occupazione di memoria: |
|
| 96 | +– se nomi noti staticamente, i nomi non sono necessari |
|
| 97 | +– in ogni caso, ogni nome memorizzato una sola volta |
|
| 98 | + |
|
| 99 | +Costo di gestione |
|
| 100 | +– ingresso/uscita da blocco (manipolazione di tutte le liste dei nomi presenti nel blocco) |
|
| 101 | +Tempo di accesso |
|
| 102 | +– costante (due accessi indiretti) |
|
| 103 | +Possiamo ridurre il tempo d’accesso medio, aumentando il tempo di ingresso/uscita da blocco... |
|
| 104 | + |
|
| 105 | +Es. esrcizio |
|
| 106 | + |
|
| 107 | +Si assuma che un generico linguaggio imperativo a blocchi. Il blocco A contenga una chiamata alla funzione f. Il numero dei record di attivazione (RdA) presenti run time sulla pila fra il RdA di A e quello della chiamata di f e' fissato staticamente o puo valere dinamicamente? Motivare la risoposta |
linguaggi/s02/assets/imgs/20260226_2026-02-26_13-27-05.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_13-27-05.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_13-27-34.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_13-27-34.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_13-30-25.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_13-30-25.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_13-32-49.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_13-32-49.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_13-34-18.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_13-34-18.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_14-19-03.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_14-19-03.png differ |
linguaggi/s02/assets/imgs/20260226_2026-02-26_14-22-03.png
| ... | ... | Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260226_2026-02-26_14-22-03.png differ |