[解決済み] std::system_clock と std::steady_clock の違い?
質問
とはどのような違いがあるのでしょうか?
std::system_clock
と
std::steady_clock
? (異なる結果/動作を説明する例題は素晴らしいでしょう)。
私の目標が関数の実行時間を正確に測定することである場合(ベンチマークのように)、次のうち何が最良の選択でしょうか?
std::system_clock
,
std::steady_clock
と
std::high_resolution_clock
?
どのように解決するのですか?
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
.
例えば、システム全体の時計は夏時間のようなものに影響されるかもしれません。その場合、将来のある時点でリストされる実際の時間は、実際には過去の時間であることがあります。(例: 米国では、秋になると時間が 1 時間戻るため、同じ時間を 2 回経験することになります)。しかし
steady_clock
はそのようなものに影響されることは許されません。
この場合の "steady" についての別の考え方は、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
など) を使用している可能性が高いからです。しかし、ベンチマークを行う場合、プラットフォームによって扱いが異なるため、ベンチマークにプラットフォーム固有のタイマーを使用することを本当に考慮すべきです。例えば、あるプラットフォームでは、プログラムが必要とする実際のクロックティック数(同じCPU上で動作する他のプロセスとは無関係)を決定するための何らかの手段を提供するかもしれません。さらに良い方法は、本物のプロファイラーを手に入れ、それを使用することです。
関連
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】CLOCK_REALTIMEとCLOCK_MONOTONICの違い?
-
[解決済み] Linux で時間を計測する - time vs clock vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?