質問
古いスレッドを調べましたが、質問への答えが見つかりませんでした:
Cプログラム内で関数の本体の時間を計るにはどうすればよいですか?
解決
簡単な方法は、「時計」機能を使用することです:
#include <time.h>
clock_t start, end;
double cpu_time_used;
start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
またはLinuxを使用している場合は、「time」コマンドを使用して、アプリの実行にかかる時間を計ることができます。ただし、特定のコードセクションの時間を計測することはできません。プロセスの開始などにかかる時間も含まれます。
time ./myapp
編集:これは非常に基本的な「クイックタイマーをハックする」アプローチです。真のパフォーマンスプロファイリングを行うには、Larry Watanabeが提案する適切なプロファイラーを確認する必要があります。
他のヒント
これは、コンパイラとOSに依存します。 Sunワークステーションでは、「prof」を使用していました。または「gprof」。コンパイラ、OS、およびマシン用のプロファイリングツールは確かにあります。「C profile yourOS yourcompiler」をグーグルで検索するだけです。 (OSとコンパイラの名前を置き換えてください)
基本的な方法はclock()関数を使用することです。これがすべての開始点です。
例:
clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
ただし、オペレーティングシステム、ハードウェア、スケジューラ、マルチスレッドなどについて学習し始めると、実行時間が非常に主観的なものであることに気付きました。パフォーマンスを測定する場合(必ずしも実行時間を意味するわけではありません)、より堅牢なツールが必要です。
Gprof は本当に使いやすいCプロファイラー。パフォーマンスの概念をよりよく理解するのに役立ちます。
time ./a.out
1つ上で実行すると、出力は次のようになります。
real 0m0.017s
user 0m0.017s
sys 0m0.000s
real
:プログラム/コマンドにかかったエンドツーエンドの合計時間
user
:ユーザーモードでかかった時間。
sys
:カーネルモードでかかった時間
Cの特定の関数名についてはわかりませんが、一般的な方法は、ボディが開始する前にマイクロ秒のタイムスタンプを保存し、最後に別のタイムスタンプを取得して減算することです。