Tutti noi siamo abituati ad avere un domicilio, ovvero
una locazione ben precisa nel quale ci sentiamo
a casa, siamo reperibili e raggiungibili dagli altri. Abbiamo quindi un recapito,
ovvero un indirizzo al quale chi ci
conosce può accedere ed usare come riferimento per venirci a trovare. Da questa
locazione possiamo traslocare, ed avere pertanto un nuovo indirizzo da
qualche altra parte. Solitamente, siamo noi che decidiamo il quando e il dove di
questo spostamento; qualcuno meno fortunato viene invece sfrattato o, in altre
parole, deallocato. Le analogie con la memoria
RAM e i bytes sono parecchie. Ma ci sono dei ma.
Quando siamo fuori dalla nostra locazione
(mentre viaggiamo in auto o in treno, siamo in vacanza o al lavoro, siamo
dal medico, visitiamo i nostri famigliari, facciamo nuoto o jogging, etc.)
continuiamo ad esistere. Abbiamo relazioni con altre persone, cresciamo,
lavoriamo, ridiamo e scherziamo. E siamo comunque raggiungibili, perchè ritengo
che oggi il recapito inteso come indirizzo di domicilio non sia tanto più
valido. Oggi il concetto di recapito è sempre più associato dal cellulare:
possiamo essere in qualsiasi punto della Terra, ma se rispondiamo al nostro
cellulare, siamo reperibili e raggiungibili. Il nostro indirizzo dove tutti ci
raggiungono non è più "Piazza Garibaldi, 7", ma "3390101010".
Per i bytes non è proprio così. Quando un byte non è allocato, il nostro software non può reperirlo, nè
leggerlo nè scriverlo. Tanto più il nostro software è scritto con un linguaggio
ad alto livello, tanto più questo è vero. Un byte non
allocato è simile ad una persona sperduta nella foresta amazzonica, di cui
nessuno sa nulla. Un byte non allocato ha comunque un
indirizzo (da qualche parte dovrà pur essere), ha comunque un valore (non
determinato), ma sia l'uno che l'altro sono ignoti e pertanto non possiamo
interagire con il byte stesso. Allocare la
memoria permette al nostro codice di sfruttare un certo numero di celle di
memoria per interagire con i bytes contenuti nelle celle. Ma pensiamoci un
attimo: allocare n bytes in memoria significa inevitabilmente distruggerne
altrettanti, ovvero i bytes (o meglio, i loro valori) che esistevano
prima dell'allocazione. Qualcuno comunque dovrà essere sacrificato. Non è sempre
così: nel buon vecchio C (e in altri linguaggi a basso livello), istanziare una
variabile byte a non implica affatto che alla
riga dopo del codice a valga 0. L'allocazione di
memoria non è necessariamente distruttiva.
Ma l'entità byte è l'indirizzo in cui si trova o il valore che
contiene?
Se fosse buona la prima, in un sistema con 1Gb di memoria, i
bytes totali sarebbero 1.073.741.824.
Se fosse buona la seconda, il
numero di bytes crescerebbe esponenzialmente. Ogni byte può valere da 0x00 a
0xFF, per ogni cella di memoria: 255 ^ 1.073.741.824, un numero talmente grande
che preferisco fermarmi qua con queste allucinazioni.
powered by IMHO 1.3