Kar*_*son 7 c c++ performance printf strftime
我遇到了一个有趣的性能难题,但在我开始深入研究glibc并在左右中心输入错误之前,我只想获得可能存在的任何洞察力.
我有一个代码,在其中一个函数中执行此操作:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
strftime( result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
Run Code Online (Sandbox Code Playgroud)
其余代码与此问题无关.当我用这个替换它:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
snprintf(result, sizeof(result), "%04d-%02d-%02d %02d:%02d:%02d",
local_tm.tm_year+1900, local_tm.tm_mon+1,
local_tm.tm_mday, local_tm.tm_hour, local_tm.tm_min,
local_tm.tm_sec);
Run Code Online (Sandbox Code Playgroud)
平均而言,我的性能提升了20%.
有没有人碰到这个?这个操作系统特定吗?
POSIX需要strftime调用tzset()(或者就好像它一样),这在linux系统上很可能是stat/etc/timezone和其他文件,这很慢(与snprintf相比).设置TZ环境变量通常会给它带来很大的推动力.
正如评论中所述,它也将消息本地化.