Ho incontrato un enigma di prestazioni interessante ma prima di iniziare a scavare in glibc e inserire bug lasciati a destra e al centro, volevo solo ottenere qualche informazione che potesse esserci.performance strftime vs. snprintf
Ho codice che, in una delle funzioni fa questo:
gettimeofday(&tv, 0);
localtime_r(&tv.tv_sec, &local_tm);
char result[25];
strftime(result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
Il resto del codice è irrilevante per questa domanda. Quando lo sostituisco con questo:
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);
in media ottengo un aumento delle prestazioni del 20%.
Qualcuno si è imbattuto in questo? Questo sistema operativo è specifico?
Quale sistema operativo/compilatore stai utilizzando? –
Quindi 'snprintf' è più efficiente di' strftime' sul tuo sistema. Questo non sarebbe considerato un "bug". –
'strftime' potrebbe avere a che fare con la localizzazione (più di' snprintf' fa). –