Почему используются мало- и big-endian?

Почему обе и малые и большие по-прежнему используются сегодня, после ~ 40 лет бинарной компьютерной науки? Существуют ли алгоритмы или форматы хранения данных, которые лучше работают с одним и тем более другим? Было бы лучше, если бы мы все переключились на одного и придерживались его?

Ответ 1

При добавлении двух чисел (на бумаге или на машине) вы начинаете с наименее значимых цифр и работаете с самыми значащими цифрами. (То же самое касается многих других операций).

В Intel 8088, который имел 16-битные регистры, но 8-битную шину данных, будучи малоконтинентами, разрешал такие инструкции запускать работу после первого цикла памяти. (Конечно, должно быть возможно, чтобы выборки памяти слова выполнялись в порядке убывания, а не увеличения, но я подозреваю, что это немного осложнило бы разработку.)

В большинстве процессоров ширина шины соответствует ширине регистра, поэтому это больше не дает преимущества.

Биг-endian числа, с другой стороны, можно сравнить, начиная с MSB (хотя многие команды сравнения фактически делают вычитание, которое в любом случае должно начинаться с LSB). Значок бит также очень легко получить.

Существуют ли алгоритмы или хранилища форматы, которые лучше работают с одним и гораздо хуже с другим?

Нет. Здесь и здесь есть небольшие преимущества, но ничего существенного.

Я действительно думаю, что litte-endian более естественен и последователен: значение бит 2 ^ (бит_позиция + 8 * byte_pos). В то время как с большим эндиантом значение бит 2 ^ (бит_позиция + 8 * (word_size - byte_pos - 1)).

Не было бы лучше, если бы мы все переключились на один и придерживались его?

Из-за доминирования x86 мы определенно тяготеем к малопринятому. Фишки ARM на многих мобильных устройствах имеют настраиваемую контенту, но часто устанавливаются в LE, чтобы быть более совместимыми с миром x86. Который в порядке со мной.

Ответ 2

Маленький Endian облегчает приведение типов. Например, если у вас есть 16-разрядное число, вы можете просто обрабатывать тот же адрес памяти, что и указатель на 8-битное число, поскольку оно содержит самые младшие 8 бит. Поэтому вам не нужно знать точный тип данных, с которым вы имеете дело (хотя в большинстве случаев вы все равно знаете).

Big Endian немного читабельнее. Биты хранятся в памяти, поскольку они отображаются в логическом порядке (наиболее важные значения сначала), как и для любой используемой человеком системы номеров.

Во времена многих, многих слоев абстракции эти аргументы на самом деле на самом деле не считаются. Я думаю, что главная причина, по которой у нас все еще есть, заключается в том, что никто не хочет переключаться. Нет очевидной причины для любой системы, так зачем менять что-либо, если ваша старая система работает отлично?

Ответ 3

И большой, и маленький эндиан имеют свои преимущества и недостатки. Даже если кто-то явно превосходил (это не так), нет никакой возможности, чтобы какая-либо устаревшая архитектура когда-либо могла переключать контенту, поэтому я боюсь, вам просто нужно научиться жить с ней.