C / Boost ASIO中的内联ntohs()/ ntohl()

嗨,我正在使用C / Boost ASIO,出于性能原因,我必须内联ntohl().每个数据包包含256个int32,因此对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().任何帮助将不胜感激.

另外,我一直在考虑使用#define宏的C方式来执行简单的int32桶移位(如果网络顺序与编译时的机器顺序不匹配).如果有人知道并且可以在x86 / x64架构上为ntohl()提供最有效的程序集,那就太棒了.最终我的代码也需要可移植到ARM.

解决方法

x86-32和x86-64平台具有32位’bswap’汇编指令.我不认为你会比一次手术更好.

uint32_t asm_ntohl(uint32_t a)
{
   __asm
    {
       mov eax,a;
       bswap eax; 
    }
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...