Depuis N3376:
20.11.7.1 [time.clock.system] / 1:
Les objets de classe system_clockreprésentent l'heure de l'horloge murale à partir de l'horloge temps réel du système.
20.11.7.2 [heure.horloge.steady] / 1:
Les objets de classe steady_clockreprésentent des horloges pour lesquelles les valeurs de time_pointne diminuent jamais à mesure que le temps physique avance et pour lesquelles des valeurs d' time_pointavance à un rythme constant par rapport au temps réel. Autrement dit, l'horloge peut ne pas être ajustée.
20.11.7.3 [time.clock.hires] / 1:
Les objets de classe high_resolution_clockreprésentent les horloges avec la période de graduation la plus courte. high_resolution_clockpeut être un synonyme de system_clockou steady_clock.
Par exemple, l'horloge à l'échelle du système peut être affectée par quelque chose comme l'heure d'été, auquel moment l'heure réelle indiquée à un moment donné dans le futur peut en fait être une heure du passé. (Par exemple aux États-Unis, à l'automne, le temps recule d'une heure, de sorte que la même heure est vécue "deux fois") Cependant, il steady_clockn'est pas autorisé à être affecté par de telles choses.
Une autre façon de penser "stable" dans ce cas est dans les exigences définies dans le tableau du 20.11.3 [time.clock.req] / 2:
Dans le tableau 59 C1, C2notez les types d'horloge. t1et t2sont des valeurs renvoyées par C1::now()où l'appel de retour t1se produit avant le retour de l'appel t2et ces deux appels se produisent avant C1::time_point::max(). [Remarque: cela signifie C1que ne s'est pas enroulé entre t1et t2. —End note]
Expression: C1::is_steady
Renvoie: const bool
Sémantique opérationnelle: truesi t1 <= t2est toujours vrai et le temps entre les tics d'horloge est constant, sinon false.
C'est tout ce que la norme a sur leurs différences.
Si vous voulez faire un benchmarking, votre meilleur pari sera probablement std::high_resolution_clock, car il est probable que votre plate-forme utilise une minuterie haute résolution (par exemple QueryPerformanceCountersous Windows) pour cette horloge. Cependant, si vous effectuez une analyse comparative, vous devriez vraiment envisager d'utiliser des minuteries spécifiques à la plate-forme pour votre référence, car différentes plates-formes gèrent cela différemment. Par exemple, certaines plates-formes peuvent vous donner des moyens de déterminer le nombre réel de cycles d'horloge requis par le programme (indépendamment des autres processus exécutés sur le même processeur). Mieux encore, mettez la main sur un véritable profileur et utilisez-le.