我遇到了一个有趣的性能难题,但在我开始深入研究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%的性能提升。
有人遇到过这种情况吗?这是与操作系统有关吗?
snprintf
比strftime
更有效率。这不会被视为“错误”。 - Greg Hewgillstrftime
可能需要处理本地化(比snprintf
更多)。 - Basile Starynkevitch