Привет, я использую C ++ / Boost ASIO, и мне нужно встроить ntohl()
по соображениям производительности. Каждый пакет данных содержит 256 int32s, следовательно, много вызовов ntohl()
. Кто-нибудь делал это?
Вот вывод скомпилированной сборки из VC10 ++ со всеми включенными оптимизациями:
; int32_t d = boost::asio::detail::socket_ops::network_to_host_long(*pdw++);
mov esi, DWORD PTR _pdw$[esp+64]
mov eax, DWORD PTR [esi]
push eax
call DWORD PTR __imp__ntohl@4
Я также попробовал обычный ntohl()
, предоставленный winsock. Любая помощь будет принята с благодарностью.
Кроме того, я думал о способе C иметь макрос #define
, который выполняет простые сдвиги int32 (если сетевой порядок не соответствует порядку машин во время компиляции). И если кто-нибудь знает и может предоставить наиболее эффективную сборку для ntohl()
на архитектуре x86 / x64, это было бы здорово. В конце концов, мой код должен быть переносимым на ARM.