Edw*_*ers 1 c string optimization c-strings strcmp
假设没有传递小于 4 个字节的字符串,那么这种优化有什么问题吗?是的,在比较大多数不相似的字符串时,在我测试过的机器上,这是一个显着的加速。
#define STRCMP(a, b) ( (*(int32_t*)a) == (*(int32_t*)b) && strcmp(a, b) == 0)
Run Code Online (Sandbox Code Playgroud)
假设字符串不少于 4 个字节,是否有一种更快的方法可以在不诉诸汇编等的情况下做到这一点?
除了可能违反对齐限制之外,将数组的地址转换char为 anint *并取消引用它始终是严格的别名违规。
例子
请参阅UDP 校验和计算不适用于较新版本的 gcc,这只是严格别名违规危险的一个示例。
请注意,C 实现本身可以在内部自由使用未定义的行为。实现者拥有对实现的知识和完全控制权,而使用其他人的编译器的人通常不会拥有这些知识。
*(int32_t*)a假设a是 4 字节对齐。一般来说情况并非如此。