little endian conversion big endianness

conversion - endianness definition



¿La razón detrás de la endianidad? (2)

Entonces, me preguntaba por qué algunas arquitecturas usan little-endian y otras big-endian. Recuerdo que leí en algún lugar que tiene que ver con el rendimiento, sin embargo, no entiendo cómo puede influir el endianismo en él. También sé que:

The little-endian system has the property that the same value can be read from memory at different lengths without using different addresses.

Lo que parece una buena característica, pero, aun así, muchos sistemas usan big-endian, lo que probablemente significa que big-endian también tiene algunas ventajas (si es así, ¿cuáles?).

Estoy seguro de que hay más en ello, probablemente a nivel de hardware. Me encantaría conocer los detalles.


He buscado un poco más en la red para obtener más información sobre esta pregunta y hay una gran variedad de respuestas y razonamientos para explicar por qué la ordenación endiana grande o pequeña puede ser preferible. Haré mi mejor esfuerzo para explicar aquí lo que encontré:

Little-Endian

La ventaja obvia para little-endianness es lo que mencionó en su pregunta ... el hecho de que un número dado puede leerse como un número de un número variable de bits de la misma dirección de memoria. Como dice el artículo de Wikipedia sobre el tema:

Aunque esta propiedad little-endian rara vez es utilizada directamente por programadores de alto nivel, a menudo es utilizada por optimizadores de código así como por programadores de lenguaje ensamblador.

Debido a esto, las funciones matemáticas que involucran múltiples precisiones son más fáciles de escribir porque el significado del byte siempre se corresponderá con la dirección de la memoria, mientras que con los números de big endian no es el caso. Este parece ser el argumento a favor de little-endianness que se cita una y otra vez ... debido a su prevalencia, tendría que asumir que los beneficios de este ordenamiento son relativamente significativos.

Otra explicación interesante que encontré se refiere a la suma y la resta. Al sumar o restar números de múltiples bytes, primero se debe buscar el byte menos significativo para ver si hay un traspaso de bytes más significativos. Debido a que el byte menos significativo se lee primero en números little-endian, el sistema puede paralelizar y comenzar el cálculo en este byte mientras recupera el (los) siguiente (s) byte (s).

Big Endian

Volviendo al artículo de Wikipedia, la ventaja declarada de los números de big endian es que el tamaño del número se puede estimar más fácilmente porque el dígito más significativo es lo primero. Relacionado con este hecho, es que es simple decir si un número es positivo o negativo simplemente examinando el bit en el desplazamiento 0 en el byte de orden más bajo.

Lo que también se afirma cuando se analizan los beneficios de big-endianness es que los dígitos binarios se ordenan como la mayoría de las personas ordenan dígitos de base 10. Esto es ventajoso en cuanto a rendimiento cuando se convierte de binario a decimal.

Si bien todos estos argumentos son interesantes (al menos eso creo), su aplicabilidad a los procesadores modernos es otra cuestión. En particular, el argumento de suma / resta fue más válido en sistemas de 8 bits ...

Para mi dinero, little-endianness parece tener el mayor sentido y es, con mucho, el más común cuando se miran todos los dispositivos que lo utilizan. Creo que la razón por la cual el big-endian todavía se usa es más por razones de legado que por desempeño. Quizás en algún momento los diseñadores de una arquitectura determinada decidieron que el big-endianness era preferible a la little-endianness, y que a medida que la arquitectura evolucionaba a lo largo de los años, la endianness seguía siendo la misma.

El paralelo que dibujo aquí es con JPEG (que es big-endian). JPEG es un formato big-endian, a pesar de que prácticamente todas las máquinas que lo consumen son little-endian. Si bien uno puede preguntar cuáles son los beneficios de que JPEG sea un big endian, me aventuraría a decir que, para todos los efectos, los argumentos de rendimiento mencionados anteriormente no hacen una gran diferencia. El hecho es que JPEG fue diseñado de esa manera, y mientras permanezca en uso, así permanecerá.


Supongo que una vez fueron los diseñadores de hardware de los primeros procesadores los que decidieron qué endianness se integraría mejor con su microarquitectura preferida / existente / planificada para los chips que estaban desarrollando desde cero.

Una vez establecido, y por razones de compatibilidad, el endianness fue más o menos llevado a las generaciones posteriores de hardware; lo que apoyaría el argumento ''legado'' de por qué todavía existen los dos tipos hoy.