c++ - 比 memcmp 快

标签 c++ optimization g++

我有一个 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/

相关文章:

c++ - C++ 可移植开源应用程序的最佳实践

python - 使用 Numpy 在 Python 中进行二次编程?

delphi - 如何使用纯 GDI 对 Canvas 区域进行颜色混合(按指定的 alpha 值着色)?

c++ - 类型检查 std::map 的键和/或 boost::any 类型的值?

c++ - VS2010是否预先计算#define定义的预处理器?

c++ - 在Linux上构建Ogre时出错: narrowing conversion

c++ - 将 double 写入 EEPROM

c++ - g++坏了?无法向类添加新方法

c++ - 无法在运行时加载动态共享库,包括 C++ 中的另一个共享库

c++ - Fortran 到 C 库的链接器错误 -/usr/lib/libf2c.so : undefined reference to 'MAIN__'