我必须在一个对性能非常敏感的地方比较相等的 16 字节内存块。
这些块总是完全对齐的,它们总是正好是 16 个字节。在我看来,我应该能够利用这些知识并提出比逐字节比较更好的方法。
事实上,我相信大多数 memcmp 实现都会这样做,但显然它会花费一些时间来分析地址和大小。就我而言,它没有,但它仍然更快:
...
mov $0x10,%ecx
mov -0x4c(%ebp),%esi
repz cmpsb %es:(%edi),%ds:(%esi)
我尝试通过实施 32 位检查来优化它,但它并没有表现得更好。可能是因为 memcmp 使用处理器指令,而我的自定义 C++ 代码没有。
对于这种情况,有什么想法比 memcmp 更快吗?