web-dev-qa-db-fra.com

Est-ce que Little Endian a gagné?

Lors d'un récent enseignement sur la bataille Big vs Little Endian, un étudiant a demandé si elle avait été réglée, et j'ai réalisé que je ne savais pas. En regardant article Wikipedia , il semble que les paires OS/architecture actuelles les plus populaires utilisent Little Endian mais qu'Internet Protocol spécifie Big Endian pour le transfert de valeurs numériques dans les en-têtes de paquets. Serait-ce un bon résumé de l'état actuel? Les cartes réseau ou processeurs actuels fournissent-ils une prise en charge matérielle pour changer l'ordre des octets?

36
Ellen Spertus

Je dirais que ce n'est pas tant gagné que cessé de compter. ARM qui constitue essentiellement tout le marché mobile est bi-endian (oh, l'hérésie!). Dans le sens où x86 "a gagné" essentiellement le marché des ordinateurs de bureau, je suppose que vous pourriez dire que peu endian a gagné, mais je pense que compte tenu de la profondeur de code (peu profonde) et de l'abstraction (beaucoup) de nombreuses applications d'aujourd'hui, c'est beaucoup moins un problème qu'auparavant. Je ne me souviens pas que l'endianisme ait vraiment surgi dans ma classe d'architecture informatique .

Je soupçonne que de nombreux développeurs ne sont même pas conscients de l'endianité ou de pourquoi c'est important. Parce que pour la grande majorité (et je veux dire vaste), cela n'a absolument rien à voir avec leur environnement de travail quotidien. C'était différent il y a 30 ans lorsque tout le monde codait beaucoup plus près du métal que de manipuler des fichiers texte sur un écran de manière fantaisiste et dramatique.

Ma suspicion générale est que la programmation orientée objet a été le début de la fin du souci de l'endianité, car les couches d'accès et d'abstraction d'un bon système OO masquent les détails de l'implémentation à l'utilisateur. , les gens se sont habitués à ce que ce ne soit pas un facteur explicite.

Addendum: zxcdw mentionne que la portabilité est préoccupante. Mais que s'est-il passé avec une vengeance au cours des 20 dernières années? Langages de programmation construits sur des machines virtuelles. Bien sûr, l'endianité de la machine virtuelle peut avoir de l'importance, mais elle peut être rendue très cohérente pour cette langue au point où elle n'est fondamentalement pas un problème. Seuls les implémenteurs VM devraient même se soucier de l'endianité du point de vue de la portabilité.

25
World Engineer

Les Endians ne comptent vraiment que lorsque vous transférez des systèmes de données binaires.

Avec l'avancement de la vitesse du processeur (et le coût de stockage beaucoup plus faible), les interfaces de données binaires deviennent plus rares, vous ne les remarquez donc pas au niveau de la couche application. Vous utilisez soit un format de transfert textuel (XML/JSON), soit vous utilisez l'abstraction de la couche de données qui s'occupe de la traduction pour vous (vous ne remarquez donc même pas qu'il y a une traduction).

Mais lorsque vous codez au niveau de la couche de données binaires, vous le remarquez et c'est très important. Par exemple, lorsque je travaillais chez VERITAS (maintenant Symantec), je construisais un logiciel qui était construit sur 25 plates-formes matérielles différentes (non seulement les gros/petits endiens, il y en a d'autres).

4
Martin York

Non, personne n'a gagné. En tant qu'espèce, nous n'avons pas réussi à normaliser l'ordre dans lequel nous stockons nos octets, ainsi que la direction dans laquelle nous écrivons et le côté de la rue dans lequel nous roulons.

Par conséquent, toute personne souhaitant transférer des données entre deux systèmes différents sur un réseau ou dans un fichier n'a que 50% de chances que la version initiale raisonnable de son code de vidage de données soit correcte dans son environnement, et même si cela fonctionne. , a 50% de chances de travailler chez son client.

Pour y faire face, vous devez rechercher des fonctions spécifiques à la plate-forme avec des noms comme "htonl" dans des en-têtes dont les noms remontent évidemment aux années 70 comme "arpa/inet.h", car la situation ne s'est pas améliorée depuis lors et ne le sera probablement jamais. .

4
Andrew Wagner

Il n'y a toujours pas de consensus:

  • La majorité des grands systèmes informatiques (serveur/ordinateur de bureau/ordinateur portable) utilisent actuellement des architectures peu endiennes
  • La majorité des petits ordinateurs (tablettes/téléphones) utilisent une architecture de processeur indépendante de l'endianité, mais exécutent des systèmes d'exploitation qui utilisent un ordre peu endian

Donc, au niveau matériel, LE est beaucoup plus courant. Mais:

  • La plupart des communications inter-ordinateurs sont effectuées à l'aide de protocoles qui spécifient l'ordre big-endian
  • Une très grande partie des logiciels du monde s'exécute sur une plate-forme virtuelle qui est par défaut en ordre big-endian chaque fois que les données sont écrites sur un stockage externe.

Les deux commandes vont être avec nous dans un avenir prévisible.

1
Jules