timeコマンドは、コマンドの実行に経過した時間を返します。
コマンド呼び出しの開始時に(system()を使用して)「gettimeofday()」を配置し、呼び出しの終了時に1つを配置して、違いをとると、同じ結果にはなりません。(それも非常に小さな違いではありません)
誰かが2つの使用法の正確な違いは何ですか、そしてどちらが呼び出しの実行の時間を計る最良の方法であるかを説明できますか?
ありがとう。
timeコマンドは、コマンドの実行に経過した時間を返します。
コマンド呼び出しの開始時に(system()を使用して)「gettimeofday()」を配置し、呼び出しの終了時に1つを配置して、違いをとると、同じ結果にはなりません。(それも非常に小さな違いではありません)
誰かが2つの使用法の正確な違いは何ですか、そしてどちらが呼び出しの実行の時間を計る最良の方法であるかを説明できますか?
ありがとう。
Unixtime
コマンドは、システムがバイナリとそのすべてのライブラリをロードするのにかかる時間、およびプログラムが終了してからすべてをクリーンアップするのにかかる時間を含む、プログラム全体の実行時間を測定します。
一方、gettimeofday
プログラム内でしか動作できません。つまり、読み込みが完了した後 (最初の測定の場合) で、クリーンアップされる前 (最終の測定の場合) にのみ機能します。
どれが一番いいですか?何を測定したいかによります... ;)
time()
エポックからの時間を秒単位で返します。
gettimeofday():
戻り値:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
それはすべて、タイミングに依存します。何かを秒単位で計測しようとしている場合time()
は、おそらくこれが最善の策です。それよりも高い解像度が必要な場合は、マイクロ秒の解像度 (1/1000000 秒)gettimeofday()
までの を検討します。
それよりも高い解像度が必要な場合は、 と の使用を検討してclock()
ください。ただし、 がかかった時間の正確な説明になるCLOCKS_PER_SECOND
ことはめったになく、使用された CPU サイクル数であることに注意してください。clock()
毎回関数の精度が異なります。C++11 では、std::chrono を使用します。
using namespace std::chrono;
auto start = high_resolution_clock::now();
/* do stuff*/
auto end = high_resolution_clock::now();
float elapsedSeconds = duration_cast<duration<float>>(end-start).count();