比较两个相同长度字符串的最快方法

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)

  • 我喜欢这种方法 (2认同)