Quelle est la différence entre un mot et un octet?

93

J'ai fait des recherches. Un octet fait 8 bits et un mot est la plus petite unité adressable en mémoire. La longueur exacte d'un mot varie. Ce que je ne comprends pas, c'est à quoi ça sert d'avoir un octet? Pourquoi ne pas dire 8 bits?

J'ai posé cette question à un prof et il a dit que la plupart des machines de nos jours sont adressables par octets, mais qu'est-ce que cela ferait un mot?

Peter Cordes
la source
12
Il vaut mieux éviter le terme «mot» en raison de son ambiguïté. Ou rendez-le précis en disant mot 16 bits, mot 32 bits, ...
starblue
2
Est-il avantageux d'avoir un mot plus grand ou plus petit?
2
@ quest4knoledge un mot plus grand permet des pointeurs plus gros (c'est-à-dire plus de RAM) et permet de traiter rapidement des nombres plus importants. Cela peut également permettre à certaines opérations comme memset d'être plus rapides, en travaillant dans des blocs plus grands. Cependant, les processeurs avec un mot plus gros nécessitent plus de transistors dans le processeur et peuvent consommer un peu plus d'énergie.
VoidStar
@VoidStar et un mot plus grand signifieraient un espace d'adressage plus petit, ou suis-je confus?
1
Pour répondre à la question "quel est l'intérêt d'avoir un octet" - c'est de l'histoire. Les processeurs n'ont pas commencé à gérer quoi que ce soit de plus gros qu'un "octet" (les anciens processeurs ne traitaient que des nybbles (4 bits) mais le terme n'a jamais vraiment pris son envol). Le premier processeur de n'importe quelle note était l'Intel 8086/8088. Il a été conçu pour traiter des instructions construites autour des "octets", c'est aussi pourquoi nous nous référons toujours à la mémoire en termes de xBytes par exemple GigaBytes car l'unité de base de la mémoire adressable était l'octet. 'K est une référence à KiloBytes dont le premier PC en avait 16, extensible à 64 - woo hoo!
Fred

Réponses:

169

Byte : Aujourd'hui, un octet est presque toujours 8 bits. Cependant, cela n'a pas toujours été le cas et il n'y a pas de "norme" ou quelque chose qui dicte cela. Puisque 8 bits est un nombre pratique pour travailler, il est devenu la norme de facto.

Word : la taille naturelle avec laquelle un processeur gère les données (la taille du registre). Les tailles de mot les plus courantes rencontrées aujourd'hui sont 8, 16, 32 et 64 bits, mais d'autres tailles sont possibles. Par exemple, il y avait quelques machines 36 bits , voire des machines 12 bits .

L' octet est la plus petite unité adressable pour une CPU. Si vous voulez définir / effacer des bits uniques, vous devez d'abord récupérer l'octet correspondant de la mémoire, jouer avec les bits, puis réécrire l'octet dans la mémoire.

Le mot, en revanche, est le plus gros morceau de bits avec lequel un processeur peut effectuer un traitement (comme l'addition et la soustraction) à la fois. Cette définition est un peu floue, car certains processeurs peuvent avoir des tailles de mot différentes pour différentes tâches (traitement entier ou virgule flottante par exemple). La taille des mots est ce avec quoi la majorité des opérations fonctionnent.

Il existe également quelques processeurs qui ont une taille de pointeur différente : par exemple, le 8086 est un processeur 16 bits, ce qui signifie que ses registres ont une largeur de 16 bits. Mais ses pointeurs (adresses) ont une largeur de 20 bits et ont été calculés en combinant d'une certaine manière deux registres de 16 bits.

DarkDust
la source
9
Excellente réponse. Je ne ferais que chipoter avec " [l] e mot en revanche est le plus gros morceau de bits avec lequel un processeur peut faire le traitement ... à la fois ". C'est en fait le morceau de bits le plus courant, etc. Beaucoup d'architectures qui ont évolué avec le temps ont une taille de mot qui n'est pas la plus large, mais elles sont souvent limitées dans ce qu'elles peuvent faire avec leurs valeurs les plus larges.
Ross Patterson
11
Pour un crédit supplémentaire, un "grignotage" est un terme courant pour un demi-octet. Il est apparu au début de l'ère du processeur micro-ordinateur ( par exemple , l'Intel 8080), et a toujours été compris comme étant de 4 bits, car à ce moment-là, l'octet s'était stabilisé à 8 bits.
Ross Patterson
6
Aujourd'hui, un octet de 8 bits est un standard; voir CEI 80000-13: 2008.
user2431763
1
@DebanjanDhar: Oui, ils ne sont pas liés. La seule relation est qu'une page est (AFAIK) toujours un multiple de la taille du mot.
DarkDust
4
x86 (comme d'habitude) complique les choses: dans la terminologie Intel, a wordvaut 16 bits, même sur les processeurs x86 modernes où la taille de l'opérande par défaut est de 32 bits (dword) et la largeur du registre entier est de 64 bits (qword). Et les registres xmm ont une largeur de 128 bits ( movdqadéplacer un double quad). Le bus mémoire a une largeur d'au moins 64 bits (et les transferts par rafales de 64 octets = une ligne de cache), et les chemins de l'unité d'exécution vers le cache ont une largeur d'au moins 128 bits, ou 256 ou même 512 bits de largeur. Quelle que soit la taille du mot machine natif du x86 moderne, ce n'est pas 16 bits, mais le x86 moderne utilise toujours la terminologie 8086.
Peter Cordes
16

Ce que je ne comprends pas, c'est à quoi ça sert d'avoir un octet? Pourquoi ne pas dire 8 bits?

Mis à part le point technique qu'un octet n'est pas nécessairement 8 bits, les raisons d'avoir un terme sont de nature humaine simple:

  • économie d'effort (alias paresse) - il est plus facile de dire "octet" plutôt que "huit bits"

  • tribalisme - des groupes de personnes aiment utiliser le jargon / une langue privée pour les distinguer des autres.

Suis le courant. Vous n'allez pas changer plus de 50 ans de terminologie informatique et de bagage culturel accumulés en vous plaignant à ce sujet.


FWIW - le terme correct à utiliser lorsque vous voulez dire "8 bits indépendants de l'architecture matérielle" est "octet".

Stephen C
la source
je pensais que l'octet n'était que la traduction française de l'octet, merci;)
Abdelouahab Pp
8

OCTET

J'essaye de répondre à cette question du point de vue C ++.

La norme C ++ définit «byte» comme «une unité de données adressable suffisamment grande pour contenir n'importe quel membre du jeu de caractères de base de l'environnement d'exécution.»

Cela signifie que l'octet se compose d'au moins suffisamment de bits adjacents pour accueillir le jeu de caractères de base pour l'implémentation. Autrement dit, le nombre de valeurs possibles doit être égal ou supérieur au nombre de caractères distincts. Aux États-Unis, les jeux de caractères de base sont généralement les jeux ASCII et EBCDIC, dont chacun peut être logé sur 8 bits. Par conséquent, il est garanti qu'un octet aura au moins 8 bits.

En d'autres termes, un octet est la quantité de mémoire requise pour stocker un seul caractère.

Si vous souhaitez vérifier le «nombre de bits» dans votre implémentation C ++, vérifiez le fichier «limits.h». Il devrait avoir une entrée comme ci-dessous.

#define CHAR_BIT      8         /* number of bits in a char */

MOT

Un mot est défini comme un nombre spécifique de bits qui peuvent être traités ensemble (c'est-à-dire en une seule tentative) par la machine / le système. Alternativement, nous pouvons dire que Word définit la quantité de données qui peuvent être transférées entre le CPU et la RAM en une seule opération.

Les registres matériels d'une machine informatique ont la taille d'un mot. La taille Word définit également la plus grande adresse mémoire possible (chaque adresse mémoire pointe vers une mémoire de taille octet).

Remarque - Dans les programmes C ++, les adresses mémoire pointent vers un octet de mémoire et non vers un mot.

Vaibhav Patle
la source
6

Pourquoi ne pas dire 8 bits?

Parce que toutes les machines n'ont pas d'octets de 8 bits. Depuis vous avez marqué ce C, regarder CHAR_BITdans limits.h.

cnicutar
la source
6

Un mot correspond à la taille des registres dans le processeur. Cela signifie que les instructions du processeur comme, add, mul, etc. sont sur des entrées de la taille d'un mot.

Mais la plupart des architectures modernes ont une mémoire adressable par blocs de 8 bits, il est donc pratique d'utiliser le mot «octet».

VoidStar
la source
Donc, dans un sens, le terme «octet» n'est-il utilisé que par commodité?
Oui, "byte" était particulièrement pratique lorsque le terme a été inventé. Comme beaucoup de conventions, une fois qu'elles sont établies, elles persistent. Je ne sais pas si la terminologie basée sur l'octet rend vraiment les ordinateurs plus faciles à comprendre dans une vue d'ensemble, mais c'est la convention dominante et n'a pas envie de changer de si tôt.
VoidStar
Byte est le terme utilisé pour une unité qui a été utilisée comme caractère dans le texte. Historiquement, il y avait des octets avec des tailles de 6 à 9 bits.
starblue
@starblue comment est-il possible qu'un caractère prenne moins de place qu'un mot?
1
@ quest4knoledge: parce que la mémoire est stockée en petits morceaux que les mots. Un mot est 32 bits (ou 64 bits sur les machines plus récentes). Dans un algorithme qui traite les caractères individuels 1 par 1, ils ne prennent un mot entier que lorsqu'ils sont à l'intérieur du processeur, et lorsqu'ils sont replacés dans la RAM, ils sont emballés plus étroitement.
VoidStar
5

Dans ce contexte, un mot est l'unité qu'une machine utilise lorsqu'elle travaille avec la mémoire. Par exemple, sur une machine 32 bits, le mot a une longueur de 32 bits et sur une machine 64 bits, une longueur de 64 bits. La taille du mot détermine l'espace d'adressage.

En programmation (C / C ++), le mot est généralement représenté par le int_ptrtype, qui a la même longueur qu'un pointeur, de cette façon abstraite ces détails.

Cependant, certaines API peuvent vous dérouter, telles que l'API Win32, car elles ont des types tels que WORD(16 bits) et DWORD(32 bits). La raison en est que l'API ciblait initialement les machines 16 bits, puis a été portée sur des machines 32 bits, puis sur des machines 64 bits. Pour stocker un pointeur, vous pouvez utiliser INT_PTR. Plus de détails ici et ici .

npclaudiu
la source
5

Il semble que toutes les réponses supposent des langages de haut niveau et principalement C / C ++.

Mais la question est étiquetée «assemblage» et dans tous les assembleurs que je connais (pour les processeurs 8 bits, 16 bits, 32 bits et 64 bits), les définitions sont beaucoup plus claires:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
johnfound
la source
3
Non, ces tailles ne sont valables que sur une machine 16 bits. Vous êtes probablement habitué à la programmation Windows qui utilise toujours ces macros car c'est un héritage de ses jours 16 bits et MS n'a pas pris la peine de corriger cela.
DarkDust
2
BTW, parce que la taille d'un mot (et même d'un octet) peut varier, ISO-C a les types int<X>_tet uint<X>_t(et plus) qui doivent être utilisés si vous voulez une variable / paramètre d'une taille de bits spécifique.
DarkDust
@DarkDust, nous parlons ici du langage d'assemblage. Les normes C ne sont pas pertinentes. BTW, je suis l'assemblage de programmation de 1980 et les mêmes noms étaient utilisés. (enfin, peut-être sauf qword)
john found
Cependant, j'ai trouvé une exception: dans GNU as, le .wordpeut être 32 bits (par exemple pour Sparc ).
DarkDust
Désolé, AS n'est pas un assembleur. C'est un mutant laid, infirme, misérable, créé dans le seul but d'être un back-end pour les compilateurs HLL.
john trouvé
3

La longueur exacte d'un mot varie. Ce que je ne comprends pas, c'est à quoi ça sert d'avoir un octet? Pourquoi ne pas dire 8 bits?

Même si la longueur d'un mot varie, sur toutes les machines modernes et même sur toutes les architectures plus anciennes que je connais, la taille du mot est toujours un multiple de la taille de l'octet. Il n'y a donc pas d'inconvénient particulier à utiliser "octet" sur "8 bits" par rapport à la taille de mot variable.

Au-delà de cela, voici quelques raisons d'utiliser l'octet (ou l'octet 1 ) sur "8 bits":

  1. Les unités plus grandes sont simplement pratiques pour éviter des nombres très grands ou très petits: vous pourriez aussi bien demander «pourquoi dire 3 nanosecondes alors que vous pourriez dire 0,000000003 seconde» ou «pourquoi dire 1 kilogramme alors que vous pourriez dire 1000 grammes», etc.
  2. Au-delà de la commodité, l'unité d'un octet est en quelque sorte aussi fondamentale que 1 bit car de nombreuses opérations ne fonctionnent généralement pas au niveau de l'octet, mais au niveau de l'octet: adressage de la mémoire, allocation de stockage dynamique, lecture à partir d'un fichier ou d'un socket, etc.
  3. Même si vous deviez adopter "8 bits" comme type d'unité, pour pouvoir dire "deux 8 bits" au lieu de "deux octets", il serait souvent très déroutant de faire commencer votre nouvelle unité par un nombre. Par exemple, si quelqu'un a dit «cent 8 bits», cela pourrait facilement être interprété comme 108 bits, plutôt que 100 bits.

1 Bien que je considère qu'un octet est 8 bits pour cette réponse, ce n'est pas universellement vrai: sur des machines plus anciennes, un octet peut avoir une taille différente (par exemple 6 bits . Octet signifie toujours 8 bits, quelle que soit la machine ( donc ce terme est souvent utilisé pour définir les protocoles réseau.) Dans l'usage moderne, l'octet est massivement utilisé comme synonyme de 8 bits.

BeeOnRope
la source
2

Quelle que soit la terminologie présente dans les fiches techniques et les compilateurs, un «octet» est de huit bits. N'essayons pas de confondre enquêteurs et généralités avec les exceptions les plus obscures, d'autant plus que le mot «Byte» vient de l'expression «By Eight». J'ai travaillé dans l'industrie des semi-conducteurs / électronique pendant plus de trente ans et pas une seule fois connu «Byte» utilisé pour exprimer quoi que ce soit plus de huit bits.

Brendan
la source
Inhabituel oui (nous le savons. Un exemple est, The texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "Les instructions 'C55x sont des longueurs d'octets variables allant de 8 bits à 48 bits « . stackoverflow.com/questions/2098149/...
barlop
1
Cela ne vient pas du tout de là. Le terme a en fait été inventé par W. Buchholtz chez IBM à la fin des années 1950. Source: bobbemer.com/BYTE.HTM . Selon Bob Bemer, l'orthographe «octet» a été choisie de préférence à «mordre» pour éviter toute confusion (avec «bit») due à des fautes de frappe. Il le saurait. Il était là!
Stephen C
(Seulement 30 ans? Vous êtes un simple whipper-snapper. J'ai appris à programmer sur des systèmes où la taille naturelle des "octets" n'était pas de 8 bits :-))
Stephen C
1

Référence: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

L'unité de base du stockage informatique est le bit. Un bit peut contenir l'une des deux valeurs, 0 et 1. Tout autre stockage dans un ordinateur est basé sur des collections de bits. Compte tenu de suffisamment de bits, il est étonnant de voir combien de choses un ordinateur peut représenter: des chiffres, des lettres, des images, des films, des sons, des documents et des programmes, pour n'en nommer que quelques-uns. Un octet est de 8 bits, et sur la plupart des ordinateurs, il s'agit du plus petit bloc de stockage pratique. Par exemple, la plupart des ordinateurs n'ont pas d'instructions pour déplacer un peu mais en ont une pour déplacer un octet. Un terme moins courant est le mot, qui est l'unité native de données d'une architecture informatique donnée. Un mot est composé d'un ou plusieurs octets. Par exemple, un ordinateur qui possède des registres 64 bits et un adressage mémoire 64 bits a généralement des mots 64 bits (8 octets). Un ordinateur exécute de nombreuses opérations dans sa taille de mot d'origine plutôt qu'un octet à la fois. Stockage informatique, avec la plupart des débits informatiques, est généralement mesuré et manipulé en octets et en collections d'octets. Un kilo-octet, ou Ko, équivaut à 1024 octets par mégaoctet, ou Mo, équivaut à 1024 2 octets par gigaoctet, ou Go, à 1024 3 octets par téraoctet, ou To, à 1024 4 octets par pétaoctet, ou PB, à 1024 5 octets Ordinateur les fabricants arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois) 024 5 octets Les fabricants d'ordinateurs arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois) 024 5 octets Les fabricants d'ordinateurs arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois)

LiLi
la source
-1

Si une machine est adressable par octet et qu'un mot est la plus petite unité qui peut être adressée en mémoire, alors je suppose qu'un mot serait un octet!

K-ballo
la source
Oui. L'unité de mémoire adressable minimale sur le TMS320C54xx (l'un des DSP de Texas Instruments) est de 16 bits, ce qui est également la plus petite taille de ses registres à usage général. Et le compilateur TI C définit char = short = int = 16 bits dessus.
Alexey Frunze
Non, la plupart des machines RISC ont des mots de 32 bits, mais peuvent adresser des octets uniques. Sur MIPS par exemple, cela signifie word certainement 32 bits, mais il y a une lbinstruction (load byte) qui charge 8 bits.
Peter Cordes
-1

Un groupe de 8 bits est appelé un octet (à l'exception où il ne l'est pas :) pour certaines architectures)

Un mot est un groupe de bits de taille fixe qui sont traités comme une unité par le jeu d'instructions et / ou le matériel du processeur. Cela signifie que la taille d'un registre à usage général (qui est généralement plus d'un octet) est un mot

Dans le C, un mot est le plus souvent appelé un entier =>int

Tolitius
la source
7
Un groupe de 8 bits est appelé un octet.
cnicutar
2
correct: le terme a octetété défini pour désigner explicitement une séquence de 8 bits en raison de l'ambiguïté associée au terme octet . Mais j'aime le son de bytemieux :)
tolitius
2
@tolitius: +1 pour "Mais j'aime le son du bytemeilleur": je soupçonne fortement que vous n'êtes pas seul dans ce domaine et sûr pour quelques systèmes de niche, la "confusion" d'un octet pouvant être d'une taille autre que 8 bits n'est plus d'actualité de nos jours.
Joachim Sauer
-1

Les termes BYTE et WORD sont relatifs à la taille du processeur auquel il est fait référence. Les processeurs les plus courants sont / étaient 8 bits, 16 bits, 32 bits ou 64 bits. Ce sont les longueurs WORD du processeur. En fait, la moitié d'un MOT est un BYTE, quelle que soit la longueur numérique. Prêt pour cela, la moitié d'un BYTE est un NIBBLE.

Chris Calley
la source
Non, dans les CPU avec des mots de 32 bits et des octets de 8 bits (par exemple MIPS ou ARM), un demi-mot équivaut à 2 octets.
Peter Cordes
-3

En fait, dans l'usage courant, le mot est devenu synonyme de 16 bits, tout comme l'octet a avec 8 bits. Cela peut être un peu déroutant car la "taille du mot" sur un processeur 32 bits est de 32 bits, mais quand on parle d'un mot de données, on voudrait dire 16 bits. Les microcontrôleurs avec une taille de mot de 32 bits ont pris l'habitude d'appeler leurs instructions "longs" (censés essayer d'éviter la confusion mot / double mot).

Brian Knoblauch
la source
1
Cela dépend entièrement du type de processeur. Comme vous le faites remarquer, sur les machines 32 bits non IA32, un «mot» correspond généralement à 32 bits.
Ross Patterson
2
@RossPatterson Cela dépend entièrement du fait que vous développiez un logiciel ou que vous dîniez.
Ingénieur
ARM / MIPS / autres architectures RISC grand public ont des mots de 32 bits. C'est la largeur du registre (sur la version 32 bits de ces ISA) et la largeur de l'instruction. 16 bits est un demi-mot, donc les instructions ARM aimentldrh charger 16 bits et l'étendre à zéro dans un registre de 32 bits. Ou ldrshpour charger et signer 16 bits.
Peter Cordes