2011-01-20 11 views
39

¿Por qué ambos pequeños y grandes endian todavía están en uso hoy, después de ~ 40 años de informática binaria? ¿Hay algoritmos o formatos de almacenamiento que funcionan mejor con uno y mucho peor con el otro? ¿No sería mejor si todos cambiamos a uno y nos apegamos a él?Porque son las dos poco- y big-endian en uso?

+0

Usted acaba de robar las palabras de mi boca. :). Gracias – Soundararajan

+0

Si no hubiéramos obtenido nuestros números de un idioma semítico, también seríamos pequeños endian. – hoodaticus

Respuesta

29

Al agregar dos números (en papel o en una máquina), comienza con los dígitos menos significativos y trabaja hacia los dígitos más significativos. (Lo mismo ocurre con muchas otras operaciones).

En Intel 8088, que tenía registros de 16 bits pero un bus de datos de 8 bits, ser little-endian permitía que tales instrucciones comenzaran a funcionar después del primer ciclo de memoria. (Por supuesto, debería ser posible que las búsquedas de memoria de una palabra se hagan en orden decreciente en vez de aumentar, pero sospecho que esto hubiera complicado un poco el diseño).

En la mayoría de los procesadores, el ancho del bus coincide con el ancho de registro así que esto ya no confiere una ventaja.

Los números de Big-Endian, por otro lado, se pueden comparar comenzando por el MSB (aunque muchas instrucciones de comparación realmente hacen un resta que necesita comenzar con el LSB de todos modos). El bit de signo también es muy fácil de conseguir.

algoritmos allí o almacenamiento formatos que funcionan mejor con uno y mucho peor con el otro?

No hay pequeñas ventajas aquí y allá, pero nada importante.

De hecho, creo que litte-endian es más natural y consistente: la importancia de un bit es 2^(bit_pos + 8 * byte_pos). Mientras que con la big endian el significado de un bit es 2^(bit_pos + 8 * (word_size - byte_pos - 1)).

¿No sería mejor si todos cambiamos a uno y nos apegamos a él?

Debido al predominio de x86, definitivamente hemos gravitado hacia little-endian. Los chips ARM en muchos dispositivos móviles tienen endianness configurable, pero a menudo se establecen en LE para ser más compatible con el mundo x86. Lo cual está bien para mí.

+10

No olvides la red que funciona principalmente en BE – mathk

+0

Whoa, nunca supe que los bits de cada byte también se almacenan menos significativos. ¿Entonces 10 = 0x0A está realmente almacenado como '01010000' y no como 00001010 binario? ¿Es esto cierto en los sistemas BE también? – krubo

+0

@krubo La unidad direccionable más pequeña es el byte, por lo que en realidad es completamente arbitrario cómo se consideran los bits que se deben organizar. La forma en que los bits se "almacenan" dentro de un byte depende por completo de la convención que desee seguir. Si lleva su convención de elección en papel, de hecho escribiría el valor 10 como 01010000 en Little Endian y como 00001010 en Big Endian. –

3

Tanto el endian grande como el pequeño tienen sus ventajas y desventajas. Incluso si uno fuera claramente superior (que no es el caso), no hay manera de que cualquier arquitectura legado sería capaz de cambiar orden de bits, por lo que me temo que sólo vamos a tener que aprender a vivir con ella.

+1

Estoy buscando ejemplos, genéricos o específicos. – orlp

+1

little-endian es (con frecuencia, pero no siempre) útil para implementaciones de bignum hogareñas (es decir, utiliza enteros más grandes que el tamaño de palabra de la máquina). – Vatine

12

Little Endian hace typecasts más fácil. Por ejemplo, si tiene un número de 16 bits que simplemente puede tratar la misma dirección de memoria como un puntero a un número de 8 bits, ya que contiene los 8 bits más bajos. Por lo tanto, no necesita saber el tipo exacto de datos con el que está tratando (aunque en la mayoría de los casos sí lo sabe).

Big Endian es un poco más legible por humanos. Los bits se almacenan en la memoria, ya que aparecen en orden lógico (los valores más significativos primero), al igual que para cualquier sistema numérico utilizado por el ser humano.

En tiempos de muchas, muchas capas de abstracción, estos argumentos ya no cuentan. Creo que la razón principal por la que todavía tenemos ambos es que nadie quiere cambiar. No hay una razón obvia para ninguno de los sistemas, entonces, ¿por qué cambiar algo si su antiguo sistema funciona perfectamente?

+2

Realmente no sigo su comentario de tipo de letra. – Artelius

+1

En un sistema little-endian, los bits menos significativos aparecen primero en la memoria. Por lo tanto, podría tratar este puntero de memoria como un valor de 8 bits (obtendrá los 8 bits menos significativos), el valor de 16 bits, etc. Siempre obtendrá el número correcto de bits en el orden esperado. En los sistemas de big endian obtendría los bits más significativos, que no es lo que espera al encasillar un tipo de datos más grande a uno más pequeño. –

+1

Typecasting generalmente se hace en registros, de lo contrario no se puede firmar-extender y tal, a excepción de un reinterpreteo, en cuyo caso tiene razón, sin embargo, en algunas máquinas de endian grande, un puntero apunta a la último byte de una palabra, no el primero, lo que aumenta la confusión. – Artelius

Cuestiones relacionadas