比较两个网络字节序u16或u32的直接方法是将它们都转换为主机字节序,然后进行比较。
但是我正在研究一个性能至关重要的程序,我们有很多这样的情况。因此,我想知道如果我们只编写一个宏来从MSB逐字节比较它们会有所帮助吗?换句话说,通过添加额外的一个(对于u16)或额外的三个(对于u32)比较,我们可以避免两个ntoh调用。
这会有帮助吗?还是取决于硬件或编译器?有没有更好的方法可以做到这一点?
谢谢
PS:我理解,与整个程序相比,性能增强可能会很小,因此需要额外的复杂性。我只是对硬件的工作方式以及如何将其推向极致感兴趣:P
我将假设您只需要将此代码运行在一个处理器上,这很可能是小端的。
您需要4个比较函数,您可以将其编写为宏。当网络顺序与处理器顺序匹配时,两个比较整个字(短或长),在另一种情况下,两个比较字节。直接比较比转换然后比较要快。
如果您需要对EQ,LT,GT等进行单独比较,对于有符号/无符号的比较,您可能需要更多的组合才能获得最佳性能。我假设您知道如何编写代码,所以我不会尝试。
自然地,您应该对整个事情进行基准测试,以确保它确实值得!单元测试也很重要,因此不是一个简单的项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句