Эффективность использования time_t и time_point в C++

В C++ std::time_t и std::chrono::time_point — это классы для хранения даты и времени. Эффективно ли использовать time_point для хранения времени. Кажется, что time_point поддерживает больше функций, будет ли он менее эффективен при его использовании по сравнению с time_t? Насколько велик размер памяти экземпляра time_point? Каков размер экземпляра time_t?


person ysrhung    schedule 11.03.2015    source источник
comment
это действительно имеет значение? Вы выделяете так много структур time_point, что это становится узким местом памяти?   -  person The Paramagnetic Croissant    schedule 11.03.2015
comment
Если размер экземпляра time_point велик, копирование экземпляров time_point может сильно повлиять на время обработки, если мы используем структуры данных STL, в которых хранятся классы, содержащие экземпляры time_point.   -  person ysrhung    schedule 11.03.2015
comment
затем сравните его. (если вы не тестировали его, то, скорее всего, это не имеет большого значения.) Кстати, аргумент о копировании, вероятно, был оправдан пару десятилетий назад, но в настоящее время узкие места преобладают промахи кеша и ошибки прогнозирования ветвлений.   -  person The Paramagnetic Croissant    schedule 11.03.2015
comment
из ответа Майка кажется, что мне не нужно его тестировать :) Конечно, нам нужно тестировать его, чтобы подтвердить на практике.   -  person ysrhung    schedule 11.03.2015
comment
Что касается узких мест, я согласен с тем, что промахи cahce и сбой предсказания ветвления могут привести к еще большему снижению производительности по сравнению с копированием. поэтому, помимо того, что я обращаю внимание на размер типа, я также постараюсь избегать использования ветвления и виртуальной функции :)   -  person ysrhung    schedule 11.03.2015
comment
Эффективную, типобезопасную и простую в использовании библиотеку дат с открытым исходным кодом, созданную на основе time_point, см. по адресу: howardhinnant.github.io/date_v2.html   -  person Howard Hinnant    schedule 28.03.2015


Ответы (1)


Эффективно ли использовать time_point для хранения времени.

Да, он просто содержит одно числовое значение.

Кажется, что time_point поддерживает больше функций, будет ли он менее эффективен при его использовании по сравнению с time_t?

Почему ты так думаешь? Невиртуальные функции не увеличивают размер объекта, а простые должны быть встроены, чтобы они были столь же эффективны, как и непосредственное обращение с числовым значением.

Насколько велик размер памяти экземпляра time_point?

Того же размера, что и числовой тип, который вы сказали использовать. Вероятно, 64 бита, если вы использовали один из удобных типов длительности, например seconds. Свяжитесь с sizeof, если это имеет значение.

Каков размер экземпляра time_t?

Не указано, обычно 32 или 64 бита. Свяжитесь с sizeof, если это имеет значение. Если это 32, то вы можете столкнуться с проблемами через пару десятилетий.

person Mike Seymour    schedule 11.03.2015