¿Cómo elegir entre little endian o big endian para la configuración del procesador?

2

Acabamos de seleccionar un nuevo procesador para nuestra aplicación, y una de las opciones de proyecto disponibles para mí es seleccionar el modo Endian: Little endian o Big endian (en Big Endian dos opciones más, BE32 y BE8)

¿Puede decirme qué factores debo considerar para tomar esta decisión?

Tenía la impresión de que un procesador está basado en Little endian o en Big Endian. ¿Significa esto que, en función de la opción seleccionada, el compilador arreglaría la endianess para que se adapte al procesador, si es necesario?

Muchas gracias.

    
pregunta IntelliChick

5 respuestas

3

Es un tipo de argumento exagerado en estos días: cualquiera de los dos funciona bien, si está escribiendo un código que realmente le importa y quiere que sea portátil, de todos modos va a codificar las dependencias

entonces, ¿por qué podrías elegir?

Big Endian: casi todos los protocolos de red son BE - esta es probablemente la razón principal para elegir estos días

Little Endian: hay algunos trucos de datos (como pasar un int y tratarlo como un char) que están disponibles, pero ninguno de ellos es portátil, por lo que es mejor evitarlo

    
respondido por el Taniwha
5

Por cierto, conozco un argumento que históricamente favorecía el formato little-endian: en una serie de CPU, especialmente en el 6502, el código podría ejecutarse más rápido usando el formato little-endian que lo que hubiera sido posible con big-endian. Considere, por ejemplo, una instrucción:

$1234:  LDA ($8A),Y ; Load byte from Y register plus the value stored in $008B-$008A
Assume $008B-$008A hold $5432, and Y holds $10

La secuencia de ejecución es:

$1234 read $B1 - Fetch opcode
$1235 read $8A - Fetch operand
$008A read $32 - Fetch LSB of target while adding $01 to $8A
$008B read $54 - Fetch MSB of target while adding $32 to $10
$5442 read $XX - Fetch byte from target

El MSB y el LSB de cualquier dirección que se lea o escriba deben basarse en un cálculo realizado en el último ciclo con valores ya en la CPU, o bien debe ser el último valor verbal extraído. El tercer ciclo puede leer el primer byte de la dirección de destino (es decir, $ 8A) sin demora; Si el procesador quisiera leer primero el segundo byte, tendría que perder un ciclo calculando la dirección. El cuarto ciclo puede calcular el LSB de la dirección de destino al obtener el MSB; si no se retira el LSB, el LSB (calculado) y el MSB (recuperado de la memoria) estarán listos simultáneamente. Si el 6502 fuera big-endian, sería necesario desperdiciar un ciclo en cada acceso indexado (en lugar de perder solo un ciclo cuando la indexación cruza un límite de 256 bytes).

No tengo conocimiento de ninguna ventaja de procesamiento para el formato big-endian más allá del hecho de que fue elegido arbitrariamente como el orden de bytes de red "estándar".

    
respondido por el supercat
3

El tiempo que los ingenieros pasan pensando en el endianismo no es gratuito en un proyecto comercial. En un procesador ARM, little endian es el camino de menor resistencia. A menos que tenga una justificación fundamental, definitivamente elija little endian, ya que esta es la endianness tradicional de ARM.

    
respondido por el downbeat
2

¿Qué procesador es? Generalmente es el caso que existe un modo preferido que todos usan. Por ejemplo, el compilador Microchip C32 para el PIC32 basado en MIPS utiliza el formato little-endian.

    
respondido por el Leon Heller
0

Solo importa si se está interconectando con el mundo exterior, es decir, si los datos se deben pasar del procesador o leer en el procesador.

Si no tiene cuidado, termina con bytes de orden invertido. Como otros han mencionado, las redes utilizan el formato big-endian. Entonces, eso es algo a considerar. Otra posible consideración es cuando tiene una configuración de varios procesadores y necesitan compartir datos.

Además, algunas arquitecturas del procesador pueden cambiar la endianness en el software.

    
respondido por el sybreon

Lea otras preguntas en las etiquetas