我遇到了一個有趣的性能難題,但在我開始深入研究glibc並輸入錯誤之前,我只想得到任何可能在那裏的洞察。strftime性能vs snprintf
我有一些代碼中的一個功能做到這一點:
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')。 –