C. Gaibisso
Programmazione di Calcolatori
Lezione VIII
Il modello di memoria
Programmazione di Calcolatori: Il modello di memoria
1
C. Gaibisso
Il modello di memoria
2834
● un insieme di locazioni
2835
● ogni locazione è univocamente
identificata da un valore numerico
detto indirizzo
2836
2837
2838
2839
2840
● ogni locazione memorizza una
sequenza di 8 bit
2841
2842
2843
2844
2855
10100000
X
● ad ogni locazione è associato un
flag che indica se la locazione è
correntemente in uso o è invece
disponibile
x
In uso
Disponibile
Programmazione di Calcolatori: Il modello di memoria
2
C. Gaibisso
Variabili
● una variabile è un insieme di
locazioni contigue in memoria
● ogni variabile è identificata da
una stringa alfa-numerica detta
nome della variabile
x
2834
2835
x
2836
2837
2838
2839
2840
2841
3
2842
x
x
x
x
2843
2844
2855
intero
x
A
● l’indirizzo di una variabile è
l’indirizzo della prima di tali
locazioni
● ogni variabile memorizza un valore
● il tipo della variabile è il tipo del
valore memorizzato
● il numero delle locazioni allocate
per una variabile è funzione del
tipo della variabile
4 locazioni x un valore intero
Programmazione di Calcolatori: Il modello di memoria
3
C. Gaibisso
Stato della memoria
• Molto informalmente:
è una foto del contenuto della memoria ad un certo
istante
• Molto meno informalmente:
è determinato dall’insieme delle quadruple
(nomevar, tipovar, valorevar, indirizzovar)
Programmazione di Calcolatori: Il modello di memoria
4
C. Gaibisso
Stato della memoria
Stato1 = Stato2?
SI
A
B
3
x
x
2
x
x
A
B
Stato1
Stato1 = Stato2?
NO
3
x
x
2
x
x
Stato2
A
2
x
x
B
2
x
x
Stato1
A
2
x
x
C
2
x
x
Stato2
Programmazione di Calcolatori: Il modello di memoria
5
C. Gaibisso
Stato della memoria
Stato1 = Stato2?
A
NO
B
2
x
x
2
x
x
A
B
Stato1
Stato1 = Stato2?
NO
A
2
x
x
B
2
x
x
Stato1
2
x
x
3
x
x
Stato2
A
2
x
x
B
2.0
x
x
Stato2
Programmazione di Calcolatori: Il modello di memoria
6
C. Gaibisso
Stato della memoria
Stato1 = Stato2?
NO
A
2
x
x
B
2
x
x
Stato1
Stato1 = Stato2?
x
2834
2835
2
B
2
Stato2
x
x
2834
2835
x
2836
NO
A
2837
x
x
x
x
x
x
2836
2837
2838
2839
2840
Stato1
x
2838
x
2839
2840
x
x
Stato2
Programmazione di Calcolatori: Il modello di memoria
7
C. Gaibisso
Definizione di una variabile
• Definizione di una variabile:
tipo_variabile nome_variabile
• Modifiche allo stato della memoria:
1. si riserva il numero di locazioni contigue in
memoria necessario a memorizzare un valore di
tipo tipo_variabile;
2. si associa il nome nome_variabile alle locazioni
riservate;
3. si associa alla variabile il tipo tipo_variabile.
Programmazione di Calcolatori: Il modello di memoria
8
C. Gaibisso
Definizione di una variabile
• Esempio:
2834
x
2835
2836
x
intero
2837
int y;
2838
2839
2840
2841
2842
x
x
x
x
y
2843
2844
x
2855
Programmazione di Calcolatori: Il modello di memoria
9
C. Gaibisso
Rilascio di memoria allocata
• Rilascio della memoria:
avviene rendendo di nuovo disponibili le
celle allocate per la variabile
• Esempio:
2835
{
2836
{
int A;
….
}
}
2834
2837
2838
2839
2840
2841
x
x
x
x
A
2842
2843
2844
2855
Programmazione di Calcolatori: Il modello di memoria
10
C. Gaibisso
Assegnamento di valori a variabili
• Assegnamento:
nome_variabile = espressione
• Modifiche allo stato della memoria:
1. si valuta il valore di espressione;
2. si sostituisce tale valore al valore memorizzato
da nome_variabile.
Attenzione:
il tipo di nome_variabile e il tipo di
espressione “devono” essere gli stessi
Programmazione di Calcolatori: Il modello di memoria
11
C. Gaibisso
Accesso alle variabili tramite nome
• Esempio:
2834
2835
2836
-4 3
B = A+C;
2837
2838
2839
2840
2841
2842
2843
2844
2855
-1
8
3
-4
x
x
x
x
x
x
x
x
x
x
x
x
B
C
A
Programmazione di Calcolatori: Il modello di memoria
12
C. Gaibisso
Accesso all’indirizzo di una variabile
• L’operatore &:
&nome_variabile
• Valore restituito:
2839
x
x
B
3
x
x
x
x
A
Programmazione di Calcolatori: Il modello di memoria
13
l’indirizzo di nome_variabile;
2834
2835
2836
2837
B = &A;
2839
puntatore
2838
2839
2840
2841
2842
2843
2844
2855
C. Gaibisso
Accesso alle variabili tramite indirizzo
• L’operatore *:
*nome_puntatore
2834
• Effetto:
2835
equivale al nome della
variabile il cui indirizzo
è in nome_puntatore;
• Esempio:
x
x
34
x
x
x
x
2836
B
2837
2838
2839
2840
2841
3
2839
2842
A
2843
A
2844
A=*B+1;
2855
Programmazione di Calcolatori: Il modello di memoria
14
C. Gaibisso
Accesso alle variabili tramite indirizzo
• Esempio:
2834
2835
2837
x
x
B
37
x
x
x
x
C
4
x
x
x
x
A
2836
C
4 3
*B = A+C;
2837
2838
2839
2840
2841
2842
2843
2844
2855
Programmazione di Calcolatori: Il modello di memoria
15
Scarica

Il modello di memoria