[英]Fast string comparison of strings with exact length in C
有没有人知道对于具有正好6个字符的字符串进行字符串比较的最快方法是什么?
我的想法如下:
inline bool jfStrEq6(const char *s1, const char *s2)
{
uint64_t s1ui64 = *((uint64_t *)s1);
uint64_t s2ui64 = *((uint64_t *)s2);
return (s1ui64 & 0x0000ffffffffffff) == (s2ui64 & 0x0000ffffffffffff);
}
这是未定义的行为:您读取了6个字符的字符串的最后一个有效字节。 只有七个而不是八个字节可以读取。 此外,字节顺序很重要:在某些体系结构上可能需要0xffffffffffff0000
。
如果您知道字符串的长度,请使用memcmp
:
inline bool jfStrEq6(const char *s1, const char *s2) {
return !memcmp(s1, s2, 6);
}
有可能,您的优化器会将其转换为CPU内在函数,以便在您的平台上实现最快的比较。
你觉得xor怎么样?
返回!(s1ui64 ^ s2ui64);
但我不确定它是否真的更快,但至少更短。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.