Faster than memcmp

Faster than memcmp

本文关键字:memcmp than Faster      更新时间:2023-10-16

我有一个UUID类,它有一个内置的16字节的UUID缓冲区。

>, <, ==, !=重载运算符只调用memcmp()的16字节值。

因为这个类只在64位体系结构上使用,用两个64位整数来比较128位是否会更快?

。而不是:

memcmp(uuid1, uuid2, 16) == 0

我可以这样做吗:

unsigned long* id1 = (unsigned long*)uuid1;
unsigned long* id2 = (unsigned long*)uuid2;
bool equal = (id1[0] == id2[0] && id1[1] == id2[1]);

或者g++使用的memcmp()函数已经做了这种优化吗?另一方面,不使用memcmp()将避免函数调用开销是吗?

对于今天的处理器,这种比较很有可能受到从内存中获取字节的速度的限制。比较本身可能与它并行,无论是字节对字节还是64位对64位。唯一确定的方法是对其进行基准测试。

至于调用开销,memcmp很可能被实现为一个根本没有开销的内在函数。请检查生成的程序集清单以确保正确。