大家好,我正在使用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
我也尝试过winsock提供的常规ntohl()
。 如果有帮助,将不胜感激。
此外,我一直在考虑采用C语言的#define
宏来进行简单的int32位移(如果网络顺序与机器顺序在编译时不匹配)。 如果有人知道并能提供在x86 / x64架构上最有效的ntohl()
汇编,那就太棒了。 最终我的代码还需要可移植到ARM。
ntohl
的调用而不是malloc
的呢?或者你是在分析进程所花费的CPU周期,排除阻塞系统调用吗? - user405725