C++ 比memcmp快

C++ 比memcmp快,c++,optimization,g++,C++,Optimization,G++,我有一个UUID类,它为UUID内置了一个16字节的缓冲区 ,对于今天的处理器,比较很有可能受到从内存中获取字节的速度的限制。比较本身可能与之并行,无论是逐字节比较还是逐64位比较。唯一确定的方法是对其进行基准测试 至于调用开销,memcmp很可能是作为一个根本没有开销的内在函数实现的。检查生成的程序集列表以确保。可能是过早的优化?您是否对其进行了分析?在分析之后,您是否发现这导致了一个严重的瓶颈?尝试双向编写,看看什么更快,但除非需要,否则不要这样做。除非这是绝对时间关键的,并且您有可验证的证

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


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


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

可能是过早的优化?您是否对其进行了分析?在分析之后,您是否发现这导致了一个严重的瓶颈?尝试双向编写,看看什么更快,但除非需要,否则不要这样做。除非这是绝对时间关键的,并且您有可验证的证据证明它会减慢您的程序,否则这不会有多大区别。其中
id1[1]
id2[1]
点。。。这不是一个超出范围的错误吗?无论如何,g++可能会内联
memcmp
,但请检查以下错误:。在任何情况下,如前所述,您都应该首先进行概要分析。谢谢,事实证明,它根本不受CPU的限制,尽管我已经无数次地调用它。即使一个内在函数有开销,它仍然必须进行比较。在这种情况下,我怀疑
int
比较稍微快一点,因为memcmp需要比较字节以确定+/-返回代码。虽然如果与0比较,optmizer可以合理地将其转换为
int
比较,因为您实际上并不关心顺序。现代CPU上的CMP指令是最快的操作之一(r,r/i为0.33,m,r/i为0.5),这是memcmp无论如何都会使用的(为什么不?),所以这是毫无用处的。马克正确地观察到,这并不重要(即使二级缓存也比廉价的CMP慢数百倍)
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]);