Domanda principale: qual è il termine preciso per il più piccolo blocco di memoria indirizzabile?
Aggiungerò un'altra risposta per affrontarla in modo diverso. Nell'hardware elettronico, lo chiamiamo la cifra bit - binaria. Questa è un'entità che può rappresentare due valori qualsiasi. Di solito pensiamo in termini di 0 e 1, ma potrebbe essere 3 o 4, 365 o 266, -3 o -4, anche 25 o 37.
Qualsiasi sistema di segnalazione può essere utilizzato per rappresentare questi valori: bandiera su, bandiera giù, occhi aperti, occhi chiusi, + 5v, -5v. Questo non è importante.
Ciò che è importante è che filosoficamente rappresentiamo la più piccola quantità distintiva di informazioni. Potrebbe essere attivato, disattivato o vero, falso o su, giù o 0, 1 - qualsiasi cosa distingua due stati separati. Possiamo mappare questi valori su uno qualsiasi dei sistemi di segnalazione sopra e molti altri.
Ora la domanda è: come possiamo testare e impostare individualmente una così piccola quantità di informazioni? Come ho detto nella risposta precedente, il B1700 ha scelto di indirizzare direttamente la più piccola quantità di informazioni.
Tuttavia, la maggior parte delle macchine ha deciso di indirizzare solo grandi quantità di informazioni. Consideriamo un gruppo di quattro bit con un singolo indirizzo. Quindi, se otteniamo il valore di 1011 nella nostra posizione, come testiamo il secondo bit da sinistra. Usiamo una maschera: 1011 e 0100 test solo il secondo bit. Quindi, come possiamo impostare il secondo bit su 1? Un piccolo calcolo aritmetico della CPU afferma che il valore sarà 15 o 1111, in modo che tutti e quattro i bit vengano riscritti in memoria, anche se in realtà abbiamo impostato solo un bit.
Ora questo non è utile per la maggior parte delle applicazioni. La maggior parte delle applicazioni rappresenta dati o informazioni, su, giù, vero, falso, aperto, chiuso.
Vogliamo dire cose come:
se aperto allora ... altro ... fine
o più probabilmente applicarlo a un'entità più grande:
se la porta è aperta allora - molto probabilmente "door.open" ... altrimenti ... fine
'door is open' illustra l'indirizzamento gerarchico. L'indirizzamento del sistema principale fornisce l'entità door e door ha il suo indirizzamento che consente l'accesso ad open (e forse ad altri attributi).
La maggior parte degli insiemi ha anche più di due possibili valori (un insieme con un valore non cambia mai e quindi non ha nemmeno bisogno di rappresentazione, quindi zero bit). Per questi abbiamo elencato set, come (giallo, verde, blu, viola foschia, rosso). Questi definiscono insiemi e tipi e il numero esatto di bit richiesto è dato dal numero di valori (log2 (numero di valori)).
Pertanto, l'indirizzamento ottimale dipende davvero dalla dimensione dell'entità utilizzata nell'applicazione, forse anche da entità di dimensioni variabili. Ma nella maggior parte dell'hardware tali indirizzi devono essere tradotti nella dimensione fissa definita dall'hardware. Questo ovviamente potrebbe costare in termini di tempo. Dovrebbe anche essere qualcosa che fa un traduttore automatico (compilatore o interprete), non un programmatore, proprio come un sistema del genere genererebbe codice per testare e impostare i bit come sopra (se i bit non sono indirizzabili direttamente).
Un punto importante qui non è pensare in termini di elettronica: l'elettronica è solo un modo davvero efficace e veloce per elaborare i calcoli. Non c'è nulla di magico nel calcolo elettronico che consenta di fare calcoli che altrimenti non potresti fare. La magia è solo nella velocità. Ecco perché le astrazioni di basso livello come i meccanismi di puntamento (puntatore) di bit, byte, word o hardware non sono davvero utili.