CBoost ASIO中的内联ntohs() ntohl()

CBoost ASIO中的内联ntohs() ntohl(),第1张

概述嗨,我正在使用C / Boost ASIO,出于性能原因,我必须内联ntohl().每个数据包包含256个int32,因此对ntohl()进行了大量调用.有没有人这样做过? 这是从VC10开始编译的程序集输出,所有优化都打开: ; int32_t d = boost::asio::detail::socket_ops::network_to_host_long(*pdw++);mov 嗨,我正在使用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     eaxcall     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 / Boost ASIO中的内联ntohs()/ ntohl()全部内容,希望文章能够帮你解决C / Boost ASIO中的内联ntohs()/ ntohl()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1214163.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存