gpt4 book ai didi

c++ - 在 C++/Boost ASIO 中内联 ntohs()/ntohl()

转载 作者:太空狗 更新时间:2023-10-29 20:17:09 26 4
gpt4 key购买 nike

您好,我正在使用 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()。任何帮助将不胜感激。

此外,我一直在考虑使用 C 语言的方式来使用 #define 宏来执行简单的 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++ - 在 C++/Boost ASIO 中内联 ntohs()/ntohl(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com