gpt4 book ai didi

c - 如何有效比较两个网络字节序 u16 或 u32

转载 作者:行者123 更新时间:2023-11-30 17:34:07 27 4
gpt4 key购买 nike

比较两个网络字节序 u16 或 u32 的直接方法是将它们都转换为主机字节序,然后进行比较。

但我正在开发一个对性能至关重要的程序,我们有很多这样的案例。所以我想知道如果我们只编写一个宏来从 MSB 逐字节比较它们会有帮助吗?换句话说,通过添加额外的 1 个(对于 u16)或额外的 3 个(对于 u32)比较,我们可以避免两次 ntoh 调用。

有帮助吗?或者它取决于硬件或编译器?有没有更好的方法来做到这一点?

谢谢

PS:我理解所需的额外复杂性,而与整个程序相比,性能增强可能很小。我只是对硬件如何工作以及如何将其发挥到极致感兴趣:P

最佳答案

我假设您只需要此代码在一个处理器上运行,该处理器很可能是小端。

您需要 4 个比较函数,您可以将它们编写为宏。当网络顺序与处理器顺序匹配时,两个比较整个字(短或长),而其他情况下两个则逐字节比较。直接比较比转换然后比较更快。

如果您需要对 EQ、LT、GT 等以及有符号/无符号进行单独比较,您可能需要更多组合才能获得最佳性能。我假设您知道如何编写代码,所以我不会尝试。

自然地,完成此操作后,您应该对整个事情进行基准测试,以确保它确实值得!单元测试也非常重要,因此不是一个微不足道的项目。

关于c - 如何有效比较两个网络字节序 u16 或 u32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23506014/

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