Gg *_* Gg 3 c++ optimization performance
请问有谁能告诉我比较两个常数char星的最有效方法吗?
#include <iostream>
#include <string>
int main()
{
const char* value1 = "hello";
const char* value2 = "HELLO";
const char* possibility = NULL;
if(stricmp(value1, value2)==0)
{
std::cout <<"\nThey Match!!!!!" << std::endl;
}
else{std::cout << "\nThey dont match :("<< std::endl;}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用了以下标准功能,但我知道它不是最有效的方法吗?
除了stricmp无法处理NULL,在我的情况下有可能发生.
那么还有其他有助于提升性能的替代方案吗?
提前致谢
没有有效的方法来比较两个字符串.
stricmp()如果它在配置文件中显示得非常高(我在真实应用程序中看到过),有几种方法可以改进基本功能.您可能会发现大部分成本都在tolower(),这是一个在每个字符上调用的函数,在比较之前将其从大写转换为小写.这个函数调用的开销,加上它的主体成本,可以累积大量的时间,因为它必须是区域敏感的并处理像Ö这样的字母.如果你知道你的比较只会在一个语言环境中执行(即只用英语),那么你可以通过构建一个256个字符的ASCII查找表并手动实现stricmp()来加速tolower().
使用GCC,如果您知道您的目标是支持SSE3的CPU,您还可以指定-msse3命令行开关,为字符串比较生成稍高效的机器指令.然而,它主要有助于区分大小写.
在我的工作中,任何需要比较大量常量字符串的算法,与使用实习或符号来表示这些标识符相反,都被认为是代码气味.在一个项目中,分析表明大约7%的CPU时间花在了tolower()里面stricmp.这实际上是每个数据中心100台机器中的7台,除了将大写字母转换为小写字母外什么都不做.