比较两个网络端u16或u32的直接方法是将它们转换为主机端,然后进行比较。
但我正在制定一项关键绩效计划,我们有很多这样的案例。所以我想知道如果我们只是编写一个宏来逐字节地从MSB比较它会有帮助吗?换句话说,通过添加额外的一个(对于u16)或额外的三个(对于u32)比较,我们可以避免两个ntoh调用。
会有帮助吗?或者它取决于硬件或编译器?有没有更好的方法呢?
谢谢
PS: 我理解所需的额外复杂性,而性能增强可能比整个程序要小。我只是对硬件如何工作以及如何将其推向极致感兴趣:P
答案 0 :(得分:0)
我将假设您只需要在一个处理器上运行此代码,这很可能是小端。
您需要4个比较函数,您可以将其写为宏。两个比较整个字(短或长)当网络顺序与处理器顺序匹配时,两个比较逐字节比较另一种情况。比转换然后比较直接比较更快。
如果您需要针对EQ,LT,GT等进行单独比较以及签名/未签名,您可能需要更多组合才能获得最佳性能。我假设你知道如何编写代码,所以我不会尝试。
当然这样做你应该对整个事情进行基准测试,以确保它真的值得!单元测试也非常重要,所以不是一个简单的项目。