Каковы преимущества разных порядков байтов?

Почему некоторые производители процессоров решили использовать

  • Маленький порядок байтов
  • Большой порядок байтов
  • средний порядок байтов
  • Любые другие?

?

Я слышал, что с прямым порядком байтов можно быстрее узнать, является ли число отрицательным или положительным, потому что этот бит является первым. (Это не имеет значения для современных процессоров, поскольку доступ к отдельным битам больше недоступен.)


person Georg Schölly    schedule 27.05.2009    source источник
comment
Является ли это средним порядком байтов, когда вы кладете яйцо на бок и разбиваете его посередине?   -  person workmad3    schedule 27.05.2009
comment
Средний порядок байтов — это схема, используемая PDP-11: биты 15..8, затем 7..0, 31..24, 23..16.   -  person finnw    schedule 27.05.2009
comment
Таким образом, средний порядок байтов - это всего лишь 16-битный прямой порядок байтов.   -  person David Sykes    schedule 02.06.2009


Ответы (5)


Преимущество прямого порядка байтов состоит в том, что переменная может быть прочитана любой длины, используя один и тот же адрес.

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

person David Sykes    schedule 27.05.2009
comment
Я не уверен, что есть реальная польза от прямого порядка байтов, кроме совместимости с другими системами. В большинстве языков высокого уровня порядок следования байтов в любом случае не имеет значения. - person David Sykes; 04.06.2009
comment
Одним из преимуществ обратного порядка байтов является то, что вы можете читать 16-битные и 32-битные значения, как и большинство людей; слева направо. Дамп памяти из 4 байтов, который говорит, что ffaa8800 на самом деле 0xffaa8800, а не 0x0088aaff, как было бы с прямым порядком байтов. - person PeyloW; 18.09.2009
comment
@DavidSykes: В этом случае изменение порядка битов вместо порядка байтов было бы более простым и дало бы тот же эффект. Я думаю, что это больше на электронном уровне, а не на том, что открыто разработчику. - person user2284570; 02.11.2015
comment
@ user2284570 Выгода для разработчика была реальной, я и многие другие использовали ее в свое время. - person David Sykes; 04.11.2015
comment
@DavidSykes: Да, но использование порядка битов было бы намного проще с триггерами, что я не понимаю, откуда взялась идея обратного порядка байтов. - person user2284570; 04.11.2015
comment
Это крайний случай, который используется редко. У прямого порядка байтов было несколько преимуществ. Это также позволило начать выполнение некоторых операций ALU во время прогрессивного декодирования и/или до завершения всех операций чтения памяти. В наше время с широкими автобусами это мало что меняет. - person ; 08.10.2017
comment
И если вы думаете, что порядок следования байтов - это PITA, посмотрите на сопоставление линий данных DDR4 ... в основном контроллеру RAM нужны всевозможные перемычки, потому что палочки RAM могут направлять трассировки практически на любой контакт, который им нравится (в пределах ограничений конфигурации SPD). - person ; 08.10.2017
comment
Нередко в то время шины данных имели ширину в один байт, поэтому, как ответил 8, 16-битные величины имели один и тот же адрес. с машинами с обратным порядком байтов некоторый уровень логики выполнял бы работу, либо машина использовала бы тот же адрес, но должна была бы получать в правильном порядке, возможно, сначала считывая 0x101, а затем 0x100, вместо естественного 0x100 0x101. но это все очень зависит от машины. Порядок с прямым порядком байтов понятен и прост и требует меньше логики. Удобочитаемость для человека не имеет значения, возможно, это оправдание дизайна в то время, но не является веской причиной для такого дизайна. - person old_timer; 14.04.2018
comment
Сегодня с более широкими шинами это не имеет особого смысла, или это иллюзия, машина с прямым порядком байтов может использовать одну и ту же нумерацию справа налево по битам и справа налево по байтам или любую комбинацию, которую вы обычно не хотите делать в любом случае доступ меньше размера шины из-за потенциального снижения производительности. Логика выбора байтовых дорожек на шине для порядка следования байтов не имеет каких-либо или каких-либо соответствующих преимуществ в любом случае. - person old_timer; 14.04.2018

Нет особой выгоды от прямого или прямого порядка следования байтов как такового, за исключением использования родного порядка следования байтов ЦП или обработки заданного порядка следования байтов файлов.

Причина, по которой сосуществуют как прямой, так и прямой порядок байтов, заключается в том, что разные производители ЦП использовали разные соглашения для представления многобайтовых данных, и в то время не существовало стандарта.

person mouviciel    schedule 27.05.2009
comment
изучая электронику, я знаком с порядком битов, но порядок байтов кажется действительно экзотическим. - person user2284570; 02.11.2015

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

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

Некоторые форматы файлов (например, TIFF) поддерживают оба порядка следования байтов. В этом случае рекомендуется сгенерировать файл с порядком байтов ЦП, предполагая, что файл будет обрабатываться на той же или аналогичной машине.

person pts    schedule 27.05.2009
comment
На самом деле, для большого файла, даже если это будут только целые числа, вы будете ограничены скоростью, с которой вы можете прочитать его с диска или из сети, если единственная обработка, которую вам нужно сделать, это завершение свопинга. На самом деле, на современных процессорах вы можете выполнять гораздо больше работы, чем раньше, прежде чем вы станете медленнее, чем ваш ввод-вывод, поэтому частое хранение файлов на диске в сжатом виде и распаковка их на лету по мере их обработки быстрее, чем просто обработка несжатого файла. - person cjs; 27.05.2009
comment
Не могли бы вы объяснить, насколько важен Endianness для чтения файлов. Какая разница, читаю ли я текстовый файл? - person Geek; 27.05.2009
comment
Хорошо, если, например, вы читаете файл, который представляет собой текстовый файл, содержащий символы UTF16LE (маленький порядок байтов), тогда, если ваш собственный формат был UTF16BE (большой), вам пришлось бы изменить смысл символов, когда они были прочитаны. Однако , как указывает Курт Самсон, это, вероятно, не имеет большого значения, поскольку скорость ЦП и оперативной памяти намного выше, чем у диска. - person 1800 INFORMATION; 27.05.2009
comment
@Geek Когда двоичный файл считывается в байтовый буфер, байты просто выбрасываются в память в том порядке, в котором они появляются на диске. LE и BE определяют, как процессор интерпретирует многобайтовые целые числа в памяти. Если int был записан в двоичный файл на LE-машине путем прямого преобразования int в байтовый буфер и прочитан на BE-машине в байтовый буфер, интерпретированный напрямую как int, это будет неправильно. - person ; 08.10.2017

При прямом порядке байтов вы не утруждаете себя изменением адреса, но при прямом порядке вам нужно: http://www.noveltheory.com/techpapers/endian.asp

На самом деле я не знаю, имеет ли все еще прямой порядок байтов преимущество перед обратным порядком байтов в современных процессорах. Я -наивно- думаю, что переключение адреса стоит процессору пиковат мощности :)

person sterz    schedule 27.05.2011

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

person supercat    schedule 16.06.2016
comment
Современная оперативная память, логика декодирования и выполнения чаще всего имеют ширину более 8 бит. Это имеет смысл только на старой или узкой шине/последовательных PIC. - person ; 08.10.2017
comment
@Barry: Известные мне случаи, когда прямой порядок байтов выгоден, связаны с возможностью начинать операции с младшими битами числа до того, как будут доступны все старшие биты. Такие случаи сегодня возникают гораздо реже, чем в прошлые годы, но тот факт, что аппаратное обеспечение использовало такие возможности, почти наверняка является причиной того, что прямой порядок байтов сегодня широко распространен. - person supercat; 09.10.2017