32ビットLinux clock()オーバーフロー
質問
Linux(および他のUnix系システム)上のC ++では、長い計算にかかったCPU(ウォールクロックではない)時間を測定する必要があるため、clock()を使用しています。問題:32ビットシステムでは、これは約2000または4000秒後に折り返します。
これに対する推奨される回避策は何ですか?
解決
次の構造体を満たす getrusage
を使用します。
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
完了のため、 struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
いつものように、詳細についてはマンページを参照してください( man getrusage
)
他のヒント
clock()
によって提供される精度が必要ですか?そうでない場合は、 time()
を2回使用して、違いを取ることができます:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
編集: time()
は、litbがコメントで指摘したようにリアルタイム(CPU時間ではない)を測定しますが、 clock()コード>。 CPU時間を測定する場合は、litbのアドバイスに従って
getrusage()
を使用する必要があります。
別の可能な方法は、ms精度を返すため、gettimeofday()を2回使用することです。
定期的に時間を取得し、ロールオーバーするたびに乗数変数intをインクリメントしますか?
所属していません StackOverflow