З N3376:
20.11.7.1 [система time.clock.system] / 1:
Об'єкти класу system_clock
представляють час настінного годинника від загальносистемного годинника реального часу.
20.11.7.2 [time.clock.steady] / 1:
Об'єкти класу steady_clock
являють собою годинники, для яких значення time_point
ніколи не зменшуються у міру просування фізичного часу і для яких значення time_point
просування з постійною швидкістю відносно реального часу. Тобто годинник може не регулюватися.
20.11.7.3 [time.clock.hires] / 1:
Об'єкти класу high_resolution_clock
представляють годинники з найкоротшим періодом галочок. high_resolution_clock
може бути синонімом system_clock
або steady_clock
.
Наприклад, на загальносистемний годинник може впливати щось на зразок переходу на літній час, і тоді фактичний час, перерахований у певний момент майбутнього, насправді може бути часом у минулому. (Наприклад, у США восени час переміщується на одну годину назад, тому одну і ту ж годину переживають "двічі") Однак steady_clock
такі дії не можуть впливати.
Інший спосіб думати про "стійкість" у цьому випадку - у вимогах, визначених у таблиці 20.11.3 [time.clock.req] / 2:
У таблиці 59 C1
і C2
позначте типи годин. t1
і t2
є значеннями, що повертаються тим, C1::now()
де повернення дзвінка t1
відбувається до повернення дзвінка, t2
і обидва ці дзвінки відбуваються раніше C1::time_point::max()
. [Примітка: цей засіб C1
не обертався між t1
і t2
. —Кінець примітки]
Вираз: C1::is_steady
Повертає: const bool
Операційна семантика: true
якщо t1 <= t2
це завжди істина, а час між годинниковими тиками постійний, інакше false
.
Це все, що має стандарт щодо їх відмінностей.
Якщо ви хочете виконати бенчмаркінг, найкраще буде, мабуть std::high_resolution_clock
, тому, що ваша платформа використовує QueryPerformanceCounter
для цього годинника таймер із високою роздільною здатністю (наприклад, у Windows). Однак, якщо ви займаєтеся бенчмаркінгом, вам дійсно слід подумати про використання таймерів, що відповідають певним платформам, для вашого тесту, оскільки різні платформи по-різному обробляють це. Наприклад, деякі платформи можуть надавати вам деякі способи визначення фактичної кількості тактових частот, необхідних програмі (незалежно від інших процесів, що працюють на тому самому ЦП). А ще краще, візьміть у руки справжній профайлер і використовуйте його.