Perché i computer dispongono di memoria indirizzabile per byte e non di memoria indirizzabile a 4 byte (o memoria indirizzabile a 8 byte per 64 bit)? Sì, capisco come possa essere utile a volte, sembra inelegante ed eccessivo. I vantaggi sono sostanziali, o è davvero solo per eredità?Perché la memoria indirizzabile per byte e non la memoria indirizzabile a 4 byte?
risposta
Processori in realtà do memoria di accesso in quantità di 64 bit (x86 ha funzionato dal Pentium o giù di lì); I processori a 64 bit hanno spesso un bus a 128 bit. Inoltre, nell'accedere alla memoria principale, si hanno raffiche che riempiono un'intera linea della cache, che è ancora più grande unità di memoria.
È solo l'indirizzamento che è basato su byte; questo aggiunge poco overhead e non è affatto eccessivo.
Oggi è assolutamente necessario l'indirizzamento basato su byte per i protocolli di rete. Implementare TCP con l'indirizzamento basato su parole sarebbe difficile: cosa vuoi read() per restituire se quello che hai ricevuto dove 17 byte? Allo stesso modo, i livelli superiori sono basati su byte: HTTP sarebbe piuttosto difficile da implementare se si ottiene una riga di richiesta come "GET/HTTP/1.0" presentata in unità di quattro byte. In sostanza, dovresti dividere le parole in byte con operazioni di spostamento e così via (che ora i processori eseguono nell'hardware, grazie all'indirizzamento basato su byte).
Su una CPU con indirizzo word, la scheda di rete può memorizzare ogni ottetto di rete in una parola macchina (e viceversa per la trasmissione). O per il caso più probabile di impacchettare 4 byte in parole a 32 bit (come Alpha AXP, che non aveva istruzioni byte-load/byte-store nelle prime versioni), il tuo esempio TCP restituirebbe 17, e sarebbe fino a software occuparsi del padding nell'ultima parola usando un turno.(L'alfa era una sorta di byte-indirizzabile, ma supportava solo carichi/negozi di parole allineati a 32 o 64 bit, con alcuni hack per lo spazio degli indirizzi I/O. http://www.tldp.org/HOWTO/Alpha-HOWTO- 8.html) –
Alpha ha aggiunto in seguito carichi/negozi di byte, ma sicuramente ha supportato TCP (utilizzando normali schede di rete PCI, AFAIK) senza di essi. Ciò ha reso efficacemente una macchina indirizzata alla parola, ma con i bit bassi dell'indirizzo a 64 bit che vengono ignorati (o richiesti per essere 0?) Anziché non presenti. –
In gran parte ragioni storiche - è diventato lo standard che le CPU comprendono. Here è una buona discussione su di esso:
In generale, una dimensione deve essere scelto per essere conveniente sia per i dati e istruzioni macchina. 8 bit (256 valori) è sufficiente per contenere i caratteri comuni in inglese e alcune lingue . I progettisti di processori a 8 bit presumibilmente hanno trovato che essere in grado di codificare 256 istruzioni comuni come un byte era un "ragionevole compromesso ". E al momento, 8 bit era in genere abbastanza per codificare altre cose come un colore di pixel o la coordinata dello schermo . Avere una dimensione di byte che è una potenza di 2 può anche avere stato ritenuto un design "più ordinato". E È interessante notare che, per esempio, Marxer, E. (1974), Elementi di elaborazione dati, descrive un byte come sia 6-bit e 8 bit seconda che il computer era della tipo "ottale" o "esadecimale".
Certamente, altre dimensioni sono state utilizzate nei primi giorni.
Avevamo bisogno di sistemare alcune dimensioni per la standardizzazione. Le persone hanno scelto la dimensione a 8 bit per le ragioni menzionate sopra da Shane. da allora siamo bloccati con memoria byte indirizzabile. ora è impossibile cambiare a causa di vari problemi di compatibilità e il fatto che gli OPCOD sono solo un byte lungo. ma usando un trucco, la memoria è facilmente resa indirizzabile alla parola per recuperare/memorizzare dati/indirizzi!
- 1. Differenza tra indirizzabile parola e byte indirizzabili
- 2. String VS Byte [], utilizzo memoria
- 3. Perché mode_t usa 4 byte?
- 4. Caricare la matrice di byte del file nella memoria
- 5. dov'è finita la mia memoria? grandi numeri di byte privati
- 6. Come risolvere la perdita di byte privati (memoria nativa)?
- 7. Perché l'allocazione ha esito positivo per la dimensione zero byte?
- 8. Convertire 4 byte a int
- 9. byte di stampa dalla memoria in C
- 10. perché la dimensione di riferimento è sempre 4 byte - C++
- 11. Come un singolo byte di memoria è accessibile dalla CPU in una memoria a 32 bit e processore a 32 bit
- 12. Byte swap durante la copia
- 13. Perché la primitiva del char Java occupa 2 byte di memoria?
- 14. Che cos'è la memoria attiva e la memoria inattiva
- 15. Python, perché mmap.move() riempie la memoria?
- 16. Perché la memoria non allocata è contrassegnata come 0xCC?
- 17. RandomAccessFile-like API per array di byte in memoria?
- 18. x86 Il push/pop può essere inferiore a 4 byte?
- 19. Strumenti ObjectAlloc: spiegazione di byte attivi e byte globali
- 20. Cosa si intende per "memoria è allineata di 8 byte"?
- 21. Perché la mia stringa di tipo `byte`?
- 22. Errore irreversibile: Dimensione di memoria consentita di byte 67108864 esauriti (tentativo di allocare 122880 byte)
- 23. Come convertire la Mappa in byte e salvarla nella memoria interna
- 24. java: Come utilizzare l'heap oltre la memoria da 4 GB in JVM a 32 bit
- 25. C: sovrascrivere un'altra funzione byte per byte
- 26. Dimensioni di memoria consentite di 262144 byte esaurite (tentativo di allocare 24576 byte)
- 27. Fuori di memoria su uno stanziamento 9.830.416 byte con bitmap
- 28. Come allocare memoria con un allineamento di 16 byte?
- 29. Dimensioni di memoria consentite di 134217728 byte esauriti
- 30. Perché non posso eseguire la logica booleana sui byte?
Fondamentalmente: perché tagliare una pizza in 8 fette? Aspetta, hai tagliato la tua pizza in 16 fette!?!? –