chr*_*irk 1 c string performance compare
字符串是固定长度8,包含字母数字字符和右边填充空格.
也就是说,
"STRING1 "
"STR2 "
"S "
Run Code Online (Sandbox Code Playgroud)
等等..
我在想这memcmp可能是最快的吗?
Bla*_*iev 10
如果确保字符串通过特定于编译器的属性在8字节边界上对齐,则可以执行以下操作:
uint64_t a = *((uint64_t *) "STRING1 ");
uint64_t b = *((uint64_t *) "STR2 ");
Run Code Online (Sandbox Code Playgroud)
然后a == b应该屈服于一个64位指令.
或者,如果它们只是常量不可变字符串(存储在进程的只读区域中),则可以继续比较const char *指针本身.它仍然是一个可靠的测试,因为在当前转换单元中出现两次的字符串文字应该引用相同的内存:
/* fails because the two strings are stored at different locations */
"STRING1 " == "STR2 "
/* should succeed, even the silliest compiler should merge both literals */
"STRING1 " == "STRING1 "
Run Code Online (Sandbox Code Playgroud)