endian-ness новых macs - все платформы для ПК сейчас одинаковы? - PullRequest
13 голосов
/ 18 сентября 2008

Означает ли смена macs на чипы Intel, что мы закончили с битовой перестановкой чисел в двоичных ресурсах для кросс-платформенного распределения данных?

Это последняя проблема или есть другие платформы, о которых я не знаю?

Ответы [ 7 ]

9 голосов
/ 18 сентября 2008

Ну, на самом деле осталось много процессоров с прямым порядком байтов.

На самом деле КПП не умер. Вы знаете, что Xbox360 использует процессоры PPC (и это хороший пример того, что эти процессоры не так плохи, как их репутация - Xbox360 совсем не медленный). Хорошо, этот не может считаться ПК.

Но считается ли сервер ПК? По-прежнему существует множество серверов, использующих процессоры Sun UltraSparc, которые обычно имеют порядок байтов, хотя последние модели могут быть как старшими, так и младшими. Существует множество процессоров, которые могут быть как одним, так и другим (например, ARM, все еще используемый во многих устройствах, таких как мобильные телефоны и тому подобное), поскольку поддержка обоих обеспечивает большую гибкость для оборудования и поставщиков программного обеспечения. Даже процессоры IA64 (Intanium, который должен был заменить x86 до того, как AMD изобрела x86-64, который был истинным 64-битным и мог эмулировать только 32-битный, в отличие от x86-64, который может быть и тем и другим), является одним из ЦП, который может быть перешел на big endian. Процессоры, которые могут быть оба, называются bi-endian.

На самом деле, если вы игнорируете Intel (и совместимые процессоры) на секунду, большинство процессоров на рынке либо с прямым порядком байтов, либо, по крайней мере, с байтовым порядком байтов, хотя, насколько я знаю, большинство из них не используются ни в каких потребительских ПК.

Однако я не вижу проблем с порядком байтов, как это делают многие программисты. Любой современный процессор может заменить аппаратный порядок байтов. На самом деле, если вы напишите программу на процессоре Intel с прямым порядком байтов, которая меняет порядковый номер каждого целого числа, считываемого из памяти, и снова при обратной записи в память, это может привести к снижению производительности всего на 5%; и на практике вам нужно только поменять порядковые номера для данных, входящих и выходящих из вашего приложения, так как в вашем приложении, конечно, постоянство.

Также обратите внимание: Почти все сетевые протоколы, которые я знаю, определяют порядок байтов в порядке байтов, TCP / IP - наиболее знакомое семейство. Поэтому, если вы работаете на нижних сетевых уровнях, вам всегда придется продолжать менять байты.

9 голосов
/ 18 сентября 2008

Вы, кажется, забыли, что порядок байтов превышает архитектуру процессора. Существует множество алгоритмов и протоколов, которые требуют определенного порядка байтов. Например, я потратил две недели, пытаясь заставить работать алгоритм хеширования MD5, только чтобы понять, что я принял сетевой порядок байтов (Big Endian), в то время как Рональд Ривест предполагал (без указания в RFC), что разработчик будет использовать Little Порядковый порядок байтов.

Напомни мне обидеть того человека когда-нибудь. : -Р

4 голосов
/ 18 сентября 2008

Это, конечно, не последняя проблема, особенно если вы пишете для встраиваемых систем, включая Pocket PC и т. Д. MIPS, ARM и другие архитектуры поддерживают архитектуры с прямым порядком байтов, которые могут выбирать их порядковый номер при запуске системы -до.

Если вы пишете код, который зависит от порядка следования байтов, вам нужно позаботиться о порядке байтов. Не ожидайте, что эта «проблема» исчезнет в ближайшее время.

3 голосов
/ 19 июля 2009

Я думал об одном и том же вопросе: поскольку Mac теперь Intel, проблема с порядком байтов исчезла? Нету. Помимо некоторых суперкомпьютеров (с которыми, если честно, нам, непрофессионалам, никогда не придется иметь дело), ​​есть еще одна важная область, где используется порядок с прямым порядком байтов: сетевые протоколы , в частности: Интернет-протокол (как в: «IP» TCP / IP).

2 голосов
/ 18 сентября 2008

Pesky x86 портит мои регистры памяти своими указателями сегментов! ;)

Полагаю, вам больше не нужно перебрасывать слова между ПК и Mac, если вы отказываетесь от обратной совместимости с PowerPC.

1 голос
/ 19 июля 2009

Теперь, более чем когда-либо, главный компьютер человека с меньшей вероятностью будет настольным компьютером с операционной системой общего назначения. Хотя это все еще довольно распространено, многие другие люди используют смартфоны или устройства UMPC, которые специально созданы, то есть для просмотра веб-страниц. Эти платформы не обязательно имеют процессор x86. Чаще всего, особенно на смартфонах, они используют ядро ​​ARM, которое является прямым порядком байтов.

0 голосов
/ 18 сентября 2008

Определите ПК, что вы считаете ПК?

В настоящее время я печатаю это из дистрибутива Linux, работающего на процессоре arm 9, для которого может быть задан другой порядок байтов, но по умолчанию используется big endian. Little endian используется Intel, AMD и Via (x86-совместимая).

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

См. Статью Википедии о Endianness для получения дополнительной информации.

...