Endianness des iPhones?


10

Je sais que les iPhones (et iPads) fonctionnent sur des processeurs ARM, qui sont petit-endian par défaut (et iOS sur lui-même est petit-endian selon la page Wikipedia); cependant, les processeurs ARM auraient la capacité de basculer entre petit-boutien et gros-boutiste. Est-ce possible et comment cela fonctionne-t-il?


1
En quoi la réponse à cette question serait-elle utile pour résoudre un problème ou améliorer votre expérience d'utilisation d'un iPhone? Si cela répond à une préoccupation du monde réel d'un utilisateur final non développeur, peu importe sa technicité, mais si la question intéresse uniquement les développeurs, elle est hors sujet ici.
Daniel

Ok, alors dois-je le déplacer vers stackoverflow?
slartibartfast

2
@myrkos Ou superuser.com
Dan J

6
Affinons d'abord la question. Nous recherchons des questions courtes qui invitent à une longue réponse. Cela s'applique à tous les sites. SuperUser n'est pas l'endroit pour les questions iOS d'aucune sorte en général. Nous sommes le meilleur endroit pour les questions matérielles sur iOS. Si vous avez un problème de programmation spécifique, alors poser cette question et expliquer comment l'endianité du matériel iOS affecte votre question de programmation spécifique serait la voie à suivre [SO et non pas ici le forum dans ce cas]. Si vous voulez un point de vue utilisateur sur ce problème, il est difficile de voir un site comme un meilleur endroit pour héberger cette question qu'ici.
bmike

2
"ARM est une architecture RISC 32 bits peu endienne largement utilisée par les appareils mobiles. Je dois faire une petite note ici: ARM est bi-endian (octetexuel, si vous voulez); vous pouvez basculer l'endianité du niveau le plus bas. Il arrive juste que iOS l'utilise comme petit endian. Je semble me souvenir que la puce de bande de base (qui est aussi un noyau ARM, au moins avec l'iPhone d'origine - jamais traité avec les autres) étant gros endian, en fait. Malheureusement, vous pouvez ne le faites pas au niveau de chaque processus, IIRC, comme vous le pouvez avec PowerPC (un avantage huuuuge pour les émulateurs). " news.ycombinator.com/item?id=1527676
0x6A75616E

Réponses:


6

même si vous pensez que vous n'avez pas besoin de connaître l'endianité que quelqu'un pourrait faire. Pas besoin d'expliquer pourquoi quelqu'un n'en a pas besoin car vous ne connaissez peut-être pas le contexte. La question n'est pas "ai-je besoin de connaître l'endianité" mais plutôt "est-ce gros ou petit endian". Alors concentrez-vous sur le sujet s'il vous plaît!

Cela dit, c'est probablement la meilleure pratique si nous ne réinventons pas la roue et nous appuyons uniquement sur les macros qu'Apple prévoit pour cela. La raison en est qu'ils ont passé un certain temps à optimiser ces macros et ont fait en sorte que cela fonctionne bien avec le simulateur ainsi que sur Mac, iPhone et tous leurs systèmes d'exploitation et matériel.

Si vous creusez ce qui se passe lorsque vous appelez, CFSwapInt16BigToHostvous pouvez voir des commentaires suggérant que ces macros produisent probablement le meilleur code machine que vous pouvez obtenir à l'aide de l'optimisation du compilateur:

OS_INLINE
uint16_t
_OSSwapInt16(
    uint16_t        data
)
{
  /* Reduces to 'rev16' with clang */
  return (uint16_t)(data << 8 | data >> 8);
}

OS_INLINE
uint32_t
_OSSwapInt32(
    uint32_t        data
)
{
#if defined(__llvm__)
  data = __builtin_bswap32(data);
#else
  /* This actually generates the best code */
  data = (((data ^ (data >> 16 | (data << 16))) & 0xFF00FFFF) >> 8) ^ (data >> 8 | data << 24);
#endif

  return data;
}

3

L'endianité n'est pas quelque chose avec laquelle les utilisateurs finaux ont une réelle interaction - mais voici un résumé de 10000 pieds de ce que cela signifie pour les utilisateurs des produits Apple.

En un mot - l'endianité d'un processeur interne est la même que la direction d'écriture d'une langue. Lorsque vous regardez les lettres d'un texte anglais, nous acceptons tous de commencer en haut à gauche et de lire d'abord à droite puis en bas. D'autres langues commencent à droite et lisent à gauche et certaines lisent même d'abord avant de se déplacer à gauche ou à droite .

Cela n'a pas vraiment d'importance pour un utilisateur si les bits dans une représentation interne d'une adresse ou d'un numéro sont stockés en petit endian ou en big endian. En fait, OS X sur Mac adhère à une représentation big-endian et iOS adhère à l'ordre little-endian . Ce fait ne signifie en aucun cas que les deux appareils ne peuvent pas fonctionner correctement ensemble. Cela fonctionne car cette représentation ne se produit qu'en interne et ne nous est pas exposée en tant qu'utilisateur.


10
OSX sur PowerPC est Big Endian, sur Intel c'est Little Endian.
zaph
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.