Почему localtime() в 24 раза медленнее, чем gmtime()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему localtime() в 24 раза медленнее, чем gmtime()?

Сообщение Anonymous »

Из-за проблем с производительностью проекта я создал следующую тестовую программу (даже использовал разные переменные для проверки работоспособности):

Код: Выделить всё

#include 
#include 

int main()
{

struct tm *timeinfo;
time_t rawtime;
clock_t begin, end, begin1, end1,begin2,end2;
double time_spent;

begin = clock();

for (int i = 0; i < 1000000; i++){
time ( &rawtime );
timeinfo = localtime(&rawtime);
}

end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("Time elapsed using localtime()      : %fs\n", time_spent);
//--------------------------------

begin1 = clock();

for (int i = 0; i < 1000000; i++){
time ( &rawtime );
timeinfo = gmtime(&rawtime);
}

end1 = clock();
time_spent = (double)(end1 - begin1) / CLOCKS_PER_SEC;
printf("Time elapsed using gmtime()         : %fs\n", time_spent);
//--------------------------------

begin2 = clock();

for (int i = 0; i < 1000000; i++){
time ( &rawtime );
localtime_r( &rawtime, timeinfo);
}

end2 = clock();
time_spent = (double)(end2 - begin2) / CLOCKS_PER_SEC;
printf("Time elapsed using localtime_r()    : %fs\n", time_spent);

return 0;
}
Результаты, которые я получаю, очень странные: localtime занимает примерно в 24 раза больше времени, функция localtime_r(), кажется, занимает меньше времени, чем localtime(), но все же намного больше, чем gmtime():

Код: Выделить всё

Time elapsed using localtime()      : 0.958033s
Time elapsed using gmtime()         : 0.038769s
Time elapsed using localtime_r()    : 0.860276s
Я скомпилировал его с помощью gcc 5, а также версии 4.x, я использовал Linux Mint (обновленный по сей день) и CentOS5. Кроме того, он был протестирован на разных физических машинах, и разница в производительности аналогична.
Почему такая (огромная) разница в производительности?

Подробнее здесь: https://stackoverflow.com/questions/415 ... han-gmtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»