strftime性能与snprintf

时间:2011-11-17 20:53:41

标签: c++ c performance strftime printf

我遇到了一个有趣的性能难题但是在我开始深入研究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);

其余代码与此问题无关。当我用它替换它时:

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);
平均而言,我的性能提升了20%。

有没有人碰到这个?这个操作系统是否具体?

1 个答案:

答案 0 :(得分:6)

POSIX需要strftime来调用tzset()(或者就像它一样),这在linux系统上很可能是stat / etc / timezone和其他文件,这很慢(与snprintf相比) 。设置TZ环境变量通常会给它带来很大的推动力。

正如评论中所述,它也将信息本地化。