Pourquoi les ordinateurs ont-ils une mémoire adressable par octet, et non une mémoire adressable sur 4 octets (ou une mémoire adressable sur 8 octets pour 64 bits)? Oui, je vois à quel point ça peut être utile parfois, ça semble juste inélégant et excessif. Est-ce que les avantages sont substantiels, ou est-ce vraiment à cause de l'héritage?Pourquoi une mémoire adressable par octet et pas une mémoire adressable sur 4 octets?
Répondre
Processeurs effectivement do accéder à la mémoire en quantités de 64 bits (x86 fait depuis Pentium ou plus); Les processeurs 64 bits ont souvent un bus de 128 bits. De plus, en accédant à la mémoire principale, vous avez des salves qui remplissent toute une ligne de cache, ce qui est encore plus grand.
C'est uniquement l'adressage basé octet; cela ajoute peu de frais généraux et n'est pas excessif du tout. Aujourd'hui, vous avez absolument besoin d'un adressage par octet pour les protocoles réseau. Implémenter TCP avec l'adressage basé sur le mot serait difficile: que voulez-vous lire() si vous avez reçu 17 octets? De même, les couches supérieures sont basées sur des octets: HTTP serait assez difficile à implémenter si vous obtenez une ligne de requête comme "GET/HTTP/1.0" présentée en unités de quatre octets. Vous devriez essentiellement diviser les mots en octets avec des opérations de décalage et tel (que maintenant les processeurs font dans le matériel, grâce à l'adressage par octet).
Sur une CPU adressée par un mot, la carte réseau peut stocker chaque octet de réseau dans un mot machine (et inversement pour transmettre). Ou pour le cas le plus probable d'empaquetage de 4 octets en mots de 32 bits (comme Alpha AXP, qui n'avait pas d'instructions byte-load/byte-store dans les premières versions), votre exemple TCP retournerait 17, et ce serait au logiciel traiter le rembourrage dans le dernier mot en utilisant un décalage.(Alpha était en quelque sorte adressable par octet, mais il ne prenait en charge que les chargements de mots de 32 ou 64 bits alignés, avec quelques hacks pour l'espace d'adressage des E/S. 8.html) –
Alpha a ajouté plus tard charges/magasins d'octets, mais il a certainement pris en charge TCP (en utilisant les cartes réseau PCI normales, AFAIK) sans eux. Cela en faisait effectivement une machine adressée par mot, mais avec les bits faibles de l'adresse 64 bits ignorés (ou requis pour être 0?) Au lieu de ne pas être présents. –
Principalement pour des raisons historiques - c'est devenu la norme que les CPU comprennent. Here est une bonne discussion à ce sujet:
En général, une taille doit être choisi pour être pratique pour les données et instructions de la machine. 8 bits (256 valeurs) est suffisant pour accueillir caractères communs en anglais et certains autres langues. Les concepteurs de processeurs 8 bits ont probablement trouvé que capable de coder 256 instructions communes comme un octet était un "compromis raisonnable ". Et à l'époque, 8 bits était également assez généralement pour coder d'autres choses comme comme une couleur de pixel ou coordonnée d'écran. Avoir une taille d'octet qui est une puissance de 2 peut également avoir été ressenti comme une conception "plus propre". Il est intéressant de noter que, pour exemple, Marxer, E. (1974), Éléments de traitement des données, décrit un octet comme étant soit 6 bits et 8 bits selon que l'ordinateur était du Type "octal" ou "hexadécimal".
Certainement, d'autres tailles ont été utilisées dans les premiers jours.
Nous avions besoin de nous fixer sur une certaine taille pour la standardisation. Les gens ont choisi la taille de 8 bits pour les raisons mentionnées par Shane ci-dessus. depuis lors, nous sommes coincés avec octet mémoire adressable. maintenant, il est impossible de changer en raison de divers problèmes de compatibilité et le fait que les OPCODES sont un octet seulement. mais en utilisant une astuce, la mémoire est facilement rendue mot-à-propos pour aller chercher/stocker des données/adresses!
- 1. Matrice adressable symétriquement
- 2. Comment les caractères ASCII sont-ils stockés en mémoire?
- 3. Segmentation de la mémoire sur les systèmes d'exploitation modernes: pourquoi avez-vous besoin de 4 segments?
- 4. Accès à la mémoire supérieure à UINT_MAX * 4 en C?
- 5. delete [] et fuites de mémoire
- 6. Pourquoi plusieurs threads mangent-ils ma mémoire?
- 7. C# - Sur les classes et la mémoire
- 8. Mémoire non gérée et mémoire gérée
- 9. Comment re-détecter une mémoire flash USB par logiciel?
- 10. Allocation de mémoire par thread
- 11. Utilisation de la mémoire sur une machine RHEL 32 bits
- 12. Déterminez la quantité de mémoire utilisée par une classe?
- 13. La mémoire libre n'efface pas le bloc de mémoire
- 14. Pourquoi un booléen de 4 octets dans .NET?
- 15. Fuite de mémoire sur iPhone :(
- 16. Fuite de mémoire dans JBoss
- 17. FTP ne pas télécharger les 4 derniers octets
- 18. Suis-je vraiment une fuite de mémoire?
- 19. Pourquoi ce code n'alloue pas de mémoire en C?
- 20. sql server 4 octets unsigned int
- 21. Quelle mémoire est publiée par didReceiveMemoryWarning/viewDidUnload?
- 22. Comment snoop sur une autre mémoire de processus de .Net?
- 23. Pourquoi la taille de la classe avec une fonction membre est de 1 octet ... Alors que la fonction membre est de 4 octets
- 24. Objets de mémoire secondaire de mémoire principale
- 25. Mémoire (sbrk) Déplacement aligné de 16 octets sur l'accès au pointeur
- 26. Comment détecter une fuite de mémoire?
- 27. Fragmentation de mémoire WPF
- 28. Lecture/écriture sur une exception de mémoire protégée lancée (.net)
- 29. Visual Studio et mémoire partagée
- 30. allocation de mémoire dans les dispositifs de petite mémoire
Fondamentalement: Pourquoi couper une pizza en 8 tranches? Attendez quoi, vous avez coupé votre pizza en 16 tranches!?!? –