#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, так что даже если она не оптимальна, она наверняка не такая медленная.