Endianness of iPhones?

7

Sé que los iPhones (y iPads) se ejecutan en procesadores ARM, que son little-endian por defecto (y iOS en sí mismo es little-endian según la página de Wikipedia); sin embargo, los procesadores ARM supuestamente tienen la capacidad de cambiar entre little-endian y big-endian. ¿Qué tan posible es esto y cómo funciona?

    
pregunta slartibartfast 04.05.2012 - 00:16

2 respuestas

5

incluso si crees que no necesitas saber la endianidad que alguien podría hacer. No es necesario explicar por qué alguien no lo necesita porque es posible que no conozca el contexto. La pregunta no es "necesito saber endianness", sino "es big o little endian". Así que concéntrate en el tema por favor!

Habiendo dicho que probablemente sea la mejor práctica si no reinventamos la rueda y simplemente confiamos en las macros que Apple proporciona para esto. La razón es porque han dedicado bastante tiempo a optimizar estas macros y asegurarse de que funcione bien con el simulador, Mac, iPhone y todo su sistema operativo y hardware.

Si investiga lo que sucede cuando invoca CFSwapInt16BigToHost puede ver comentarios que sugieren que estas macros están produciendo probablemente el mejor código de máquina que puede obtener con la ayuda de la optimización del compilador:

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;
}
    
respondido por el trudnai 26.08.2015 - 08:40
2

Endianness no es algo con lo que los usuarios finales tengan una interacción real, pero aquí hay un resumen de 10,000 pies de pie de lo que esto significa para los usuarios de los productos de Apple.

En pocas palabras, el endianness para un procesador interno es el mismo que la dirección de escritura para un idioma. Cuando miras las letras de un texto en inglés, todos estamos de acuerdo en comenzar en la parte superior izquierda y leer primero a la derecha y luego abajo. Otros idiomas comienzan a la derecha y leen a la izquierda y algunos incluso leen primero antes de moverse a la izquierda o a la derecha .

En realidad no le importa a un usuario si los bits en una representación interna de una dirección o número se almacenan en little endian o big endian. De hecho, OS X en una Mac se adhiere a una representación big-endian y iOS se adhiere a los pedidos de little-endian . Este hecho no significa de ninguna manera que los dos dispositivos no puedan funcionar juntos correctamente. Esto funciona porque esta representación solo ocurre internamente y no se expone a nosotros como usuarios.

    
respondido por el bmike 04.05.2012 - 21:03

Lea otras preguntas en las etiquetas