比memcmp更快

时间:2011-07-15 04:08:43

标签: c++ optimization g++

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

><==!=重载运算符只需在16字节值上调用memcmp()

由于此类仅用于64位架构,因此使用两个64位整数比较128位会更快吗?

e.g。 而不是:

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()将避免函数调用开销是吗?

1 个答案:

答案 0 :(得分:6)

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

对于调用开销,memcmp很可能是作为内部函数实现的,根本没有开销。检查生成的装配清单以确定。