Faster than memcmp
Faster than memcmp
我有一个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很可能被实现为一个根本没有开销的内在函数。请检查生成的程序集清单以确保正确。
相关文章:
- D-lang being faster than C++?
- 如果将两个相同的指针作为输入传递,memcmp 会做什么?
- MATLAB faster than LAPACK?
- "How to use long long data-type rather than pointers data-type to modify other variables ?"
- std::memcmp 可以读取超过第一个差异的任何字节吗?
- 如何实现随机访问迭代器的"less than operator"?
- 如何在 C++ 类中重载 'less than' 运算符以比较常量?
- 为什么我收到错误:"there is more than one default constructor"?
- MEMCMP以相同(零值)位字段结构返回非零
- 使用memcmp优化子程序,memcpy
- std::tuple faster than std::array?
- 子字符串与 std::memcmp 或字符串::比较的比较
- 有没有办法通过'greater/lesser than'而不是"="来定义'int'?
- "compares less than 0"是什么意思?
- memcmp - 是否有更快的方法来按位比较两个缓冲区
- OpenSSL 错误"data greater than mod len"
- 特征:如何将"greater than"的结果(在ArrayXf上)转换为特征向量
- Is calloc better than malloc?
- "less than" 与GCC 4与6的ifstream比较
- Faster than memcmp