更快的内存比较等于16字节块比memcmp

时间:2014-12-07 04:54:19

标签: c++ performance memcmp

我必须在性能敏感的地方比较相等的16字节内存块。

块总是完全对齐,它们总是正好是16个字节。在我看来,我应该能够利用这些知识,并提出比逐字节比较更好的东西。

事实上,我相信大多数memcmp实现都是这样做的,但显然它需要一段时间来分析地址和大小。在我的情况下,它没有,但它仍然更快:

...
mov    $0x10,%ecx
mov    -0x4c(%ebp),%esi
repz cmpsb %es:(%edi),%ds:(%esi)

我试图通过自己实施32位检查来优化它,但它的表现并不好。可能是因为memcmp使用处理器指令,我的自定义c ++代码没有。

对于这种情况,任何想法都会比memcmp更快吗?

1 个答案:

答案 0 :(得分:0)

你可以试试这样的东西,看看与memcmp相比会有什么不同(假设你有64位处理器):

#define MY_CMP(B1, B2) (((int64_t *) (B1))[0] == (int64_t *) (B2))[0] && ((int64_t *) (B1))[1] == ((int64_t *) (B2))[1])

if (MY_CMP(array1, array2)) {
    // something
}

但是如果毛虫是好的,你应该看不出任何差异。