我有一个 UUID 类,它有一个用于 UUID 的内置 16 字节缓冲区。
>
, <
, ==
, !=
重载运算符只需调用 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]);
或者 memcmp()
G++使用的函数已经进行了这种优化吗?
另一方面,不使用 memcmp()
会避免函数调用开销吗?
最佳答案
对于当今的处理器,比较很有可能受到从内存中获取字节的速度的限制。比较本身可能会与之并行,无论是逐字节还是 64 位乘 64 位。唯一可以确定的方法是对其进行基准测试。
至于调用开销,memcmp 很可能实现为一个没有任何开销的内部函数。检查生成的汇编列表以确定。
关于c++ - 比 memcmp 快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702583/