Wpadłem w interesującą zagadkę wydajności, ale zanim zacznę zagłębiać się w glibc i wprowadzać błędy w lewo iw prawo, chciałem tylko uzyskać wgląd w to, co może być.Wydajność strftime vs snprintf
Mam kod, który w jednej z funkcji wykonuje to:
gettimeofday(&tv, 0);
localtime_r(&tv.tv_sec, &local_tm);
char result[25];
strftime(result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
Reszta kodu nie ma znaczenia dla tego pytania. Kiedy zastąpię to:
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);
średnio otrzymuję 20% poprawy wydajności.
Czy ktoś wpadł na to? Czy ten system operacyjny jest specyficzny?
Z jakiego systemu operacyjnego/kompilatora korzystasz? –
Więc 'snprintf' jest bardziej wydajny niż' strftime' w twoim systemie. Nie będzie to uważane za "błąd". –
'strftime' może mieć do czynienia z lokalizacją (robi to więcej niż' snprintf'). –