10 votes

Endiveté des iPhones ?

Je sais que les iPhones (et iPads) fonctionnent sur des processeurs ARM, qui sont little-endian par défaut (et iOS sur lui-même est little-endian selon la page Wikipedia) ; cependant, les processeurs ARM sont censés avoir la capacité de passer de little-endian à big-endian. Comment cela est-il possible et comment cela fonctionne-t-il ?

6voto

trudnai Points 61

Même si vous pensez que vous n'avez pas besoin de connaître l'endianness que quelqu'un pourrait faire. Il n'est pas nécessaire d'expliquer pourquoi quelqu'un n'en a pas besoin parce que vous ne connaissez peut-être pas le contexte. La question n'est pas "ai-je besoin de connaître l'endianness" mais plutôt "est-ce big- ou little endian". Concentrez-vous donc sur le sujet, s'il vous plaît !

Cela dit, il est probablement préférable de ne pas réinventer la roue et de se contenter des macros fournies par Apple à cet effet. La raison en est qu'ils ont passé un certain temps à optimiser ces macros et à s'assurer qu'elles fonctionnent bien avec le simulateur ainsi que sur Mac, iPhone et tous leurs OS et matériels.

Si vous creusez ce qui se passe quand vous invoquez CFSwapInt16BigToHost vous pouvez voir des commentaires qui suggèrent que ces macros produisent probablement le meilleur code machine que vous pouvez obtenir avec 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;
}

3voto

Oskar Points 1242

L'endiveté n'est pas une chose avec laquelle les utilisateurs finaux ont une réelle interaction, mais voici un résumé à 10 000 pieds de ce que cela signifie pour les utilisateurs de produits Apple.

En bref, l'endianness d'un processeur interne est la même que le sens d'écriture d'une langue. Lorsque vous regardez les lettres d'un texte anglais, nous sommes tous d'accord pour commencer en haut à gauche et lire d'abord à droite puis en bas. D'autres langues commencent à droite et se lisent vers la gauche puis vers le bas. certains lisent même d'abord vers le bas avant de se déplacer vers la gauche ou la droite .

Il importe peu à l'utilisateur que les bits de la représentation interne d'une adresse ou d'un nombre soient stockés en little endian ou en big endian. En effet OS X sur un Mac adhère à une représentation big-endian et iOS adhère à un ordre little-endian. . Ce fait ne signifie en aucun cas que les deux appareils ne peuvent pas fonctionner ensemble correctement. Cela fonctionne parce que cette représentation ne se produit qu'en interne et ne nous est pas exposée en tant qu'utilisateurs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X