5

timeコマンドは、コマンドの実行に経過した時間を返します。

コマンド呼び出しの開始時に(system()を使用して)「gettimeofday()」を配置し、呼び出しの終了時に1つを配置して、違いをとると、同じ結果にはなりません。(それも非常に小さな違いではありません)

誰かが2つの使用法の正確な違いは何ですか、そしてどちらが呼び出しの実行の時間を計る最良の方法であるかを説明できますか?

ありがとう。

4

4 に答える 4

6

Unixtimeコマンドは、システムがバイナリとそのすべてのライブラリをロードするのにかかる時間、およびプログラムが終了してからすべてをクリーンアップするのにかかる時間を含む、プログラム全体の実行時間を測定します。

一方、gettimeofdayプログラム内でしか動作できません。つまり、読み込みが完了した後 (最初の測定の場合) で、クリーンアップされる前 (最終の測定の場合) にのみ機能します。

どれが一番いいですか?何を測定したいかによります... ;)

于 2013-03-01T13:30:01.267 に答える
5

time()エポックからの時間を秒単位で返します。

gettimeofday():戻り値:

struct timeval {
       time_t      tv_sec;     /* seconds */
       suseconds_t tv_usec;    /* microseconds */
};
于 2013-03-01T13:30:08.717 に答える
4

それはすべて、タイミングに依存します。何かを秒単位で計測しようとしている場合time()は、おそらくこれが最善の策です。それよりも高い解像度が必要な場合は、マイクロ秒の解像度 (1/1000000 秒)gettimeofday()までの を検討します。

それよりも高い解像度が必要な場合は、 と の使用を検討してclock()ください。ただし、 がかかった時間の正確な説明になるCLOCKS_PER_SECONDことはめったになく、使用された CPU サイクル数であることに注意してください。clock()

于 2013-03-01T13:29:17.077 に答える
1

毎回関数の精度が異なります。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();
于 2013-03-01T13:29:22.607 に答える