Gestione della memoria

La memoria è uno dei due componenti principali di un elaboratore elettronico, insieme alla CPU.

Quando parliamo di memoria in questo capitolo, intendiamo sempre la memoria primaria, quella a cui il processore ha accesso diretto; generalmente è costituita dalla RAM, ovvero Random Access Memory, che si può traddure in memoria ad accesso casuale o meglio in memoria ad accesso non sequenziale.

Diversi tipi di RAM. Fonte: wikipedia

La caratteristica principale della memoria RAM è che, come dice il nome, si può accedere a qualsiasi parte di questo tipo di memoria semplicemente conoscendone l'indirizzo, rappresentato da un numero intero.

Al contrario, altri tipi di memoria come l'hard-disk, devono essere acceduti a cluster: per poter accedere ad una certa porzione di memoria, bisogna sapere in che cluster appartiene. In base alla posizione del cluster, potrebbe volerci più o meno tempo per accedere ad un certo dato.

Possiamo immaginare la RAM come un lunghissimo nastro, diviso in caselle, proprio come il nastro della macchina di Turing che abbiamo studiato ad inizio anno.

Un esempio di macchina di Turing. Fonte: wikipedia

Per convenzione e comodità, si usano i numeri esadecimali per indicare l'indirizzo di memoria a cui vogliamo accedere. Useremo inoltre la convenzione di scrivere gli indirizzi di memoria in verticale, con i numeri più bassi in alto.

Facciamo un esempio: immaginiamo una memoria RAM di 4GB, ovvero 2^32 bit. L'indirizzo più alto è quindi 2^32 che rappresentato in esadecimale è 0xFFFFFFFF (ricordiamoci che ogni lettera corrisponde a 4 bit). La rappresentazione sarà quindi come segue:

Indirizzo
0x00
0x01
0x02
...
0xFFFFFFFF