4
#include <time.h> 
time_t start,end; 
time (&start);
//code here
time (&end); 
double dif = difftime (end,start); 
printf ("Elasped time is %.2lf seconds.", dif ); 

開始時間と終了時間の両方で0.000を取得しています。エラーの原因がわかりません。

また、経過時間を計算するには、time(start)とtime(end)またはstart = clock()とend = clock()を使用することをお勧めします。

4

6 に答える 6

7

ほとんどの (ほぼすべての?) システムでtime()は、1 秒単位の粒度しかないため、1 秒未満の長さの時間は測定できません。Unix を使用している場合は、gettimeofday代わりに使用してみてください。

于 2011-05-30T18:05:56.883 に答える
4

使用したい場合は、CPU 時間のみclock()を測定することを理解していることを確認してください。また、秒に変換するには、 で割る必要があります。CLOCKS_PER_SEC

于 2011-05-30T18:14:58.210 に答える
2

通常、コードの短い抜粋は、プロファイリング目的で実行するのに十分な時間はかかりません。一般的な手法は、呼び出しを何回も (何百万回も) 繰り返してから、結果の時間デルタを反復回数で割ることです。擬似コード:

カウント = 10,000,000

開始 = readCurrentTime()

ループ回数:
    マイコード()

終了 = readCurrentTime()

経過合計 = 終了 - 開始
経過したForOneIteration =経過合計/カウント

精度が必要な場合は、ループ オーバーヘッドを割り引くことができます。例えば:

ループ回数:
    マイコード()
    マイコード()
および経過時間 1 を測定します (2 x カウント反復 + ループ オーバーヘッド)

ループ回数:
    マイコード()
および経過2を測定します(反復のカウント+ループオーバーヘッド)

実際の経過時間 = 経過時間 1 - 経過時間 2
(反復を数えます -- 残りの項は相殺されるため)
于 2011-05-30T18:17:06.737 に答える
0

time(せいぜい)2番目の解像度があります。コードがそれよりもはるかに短い時間で実行される場合、違いが見られる可能性はほとんどありません。

プロファイラー (*nix では gprof、OS XではInstrumentsなど。Windows については、「 Eclipse を使用する場合の Windows での C コードのプロファイリング」を参照) を使用して、コードの時間を計ります。

于 2011-05-30T18:08:27.757 に答える
0

測定の間に使用しているコードの実行速度が速すぎます。0 から 99,999 までの数字を印刷するコードを試してみたところ、

経過時間は 1.00 秒です。

于 2011-05-30T18:12:36.840 に答える
0

コードの実行に 1 秒もかかりません。

于 2011-05-30T19:06:04.070 に答える