С 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
Операционная семантика: trueif t1 <= t2всегда истинно, а время между тактами часов постоянно, в противном случае false.
Это все, что в стандарте говорится об их различиях.
Если вы хотите провести сравнительный анализ, вам, вероятно, будет лучше всего std::high_resolution_clock, потому что вполне вероятно, что ваша платформа использует таймер высокого разрешения (например, QueryPerformanceCounterв Windows) для этих часов. Однако, если вы проводите тестирование, вам действительно следует подумать об использовании таймеров для конкретной платформы для вашего теста, потому что разные платформы обрабатывают это по-разному. Например, некоторые платформы могут предоставить вам некоторые средства определения фактического количества тактов часов, которое требуется программе (независимо от других процессов, работающих на том же процессоре). А еще лучше, возьмите в руки настоящий профилировщик и используйте его.