【发布时间】:2011-11-17 20:53:41
【问题描述】:
我遇到了一个有趣的性能难题,但在我开始研究 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更有效。这不会被视为“错误”。 -
strftime可能需要处理本地化问题(比snprintf更多)。 -
@SethCarnegie 这是在 RHEL 4 v3.4.6 上完成的,我今天稍后将在 Ubuntu 10.04 上进行测试。
-
@GregHewgill 我并没有将其视为一个错误,只是在寻找一个原因。
标签: c++ c performance strftime printf