Порядок байтов QDataStream по умолчанию

#performance #qt #endianness #default-value #qdatastream

Вопрос:

Порядок байтов по умолчанию QDataStream is BigEndian , в соответствии с его документацией. AFAIK это означает, что записанные данные на платформе малой длины преобразуются из небольших в большие, а считанные данные преобразуются из больших в маленькие.

Большинство платформ, поддерживаемых Qt, особенно x86/x64, являются маломощными. В этой ссылке говорится, что Qt CI даже не включает в себя какие-либо устройства большого класса. Это означало бы, что конфигурация по умолчанию QDataStream требует большого количества преобразований завершенности на основных платформах Qt, что было бы довольно неоптимальным.

Я упустил что-то очевидное? Если нет, то почему Qt не использовался LittleEndian по умолчанию для более эффективной поддержки основных платформ?

Комментарии:

1. То же самое можно сказать и о порядке байтов в сети (который также является IIRC). Предположительно, они решили последовать за ними в своем номере?

2. @InnocentBystander Есть ли что-то вроде «порядка байтов в сети»? Я бы ожидал, что порядок байтов в протоколах также будет отличаться. Какие протоколы вы имеете в виду?

3. В историческом документе IETF RFC 1700 говорится: » Конвенция в документации интернет-протоколов заключается в том, чтобы выражать числа в десятичной дроби и отображать данные в порядке «большого конца» «. Протокол может свободно использовать другой конец и даже переменный, но многие исторически использовали порядок большого конца из-за этого. Преимущества Big-endian заключаются в том, что их проще отлаживать, в то же время они немного менее эффективны на архитектурах little-endian, таких как доминирующая x86-64.

4. @Silicomancer да. Просто погуглите «порядок байтов в сети».

5. Кроме того, набор инструкций x86 знает, что для этого есть команда — BSWAP, так что даже если она не оптимальна, она наверняка не такая медленная.