[an error occurred while processing this directive] [an error occurred while processing this directive]

時間を計る。

gettimeofday の使い方

gettimeofday を使うと、ミリセカンド単位で時間を計ることができます。
  struct timeval tv;
  ...
  gettimeofday(&tv, NULL);
tv.tv_sec に秒が、tv.tv_usec にマイクロ秒が入っています。
しかし、ちょっと面倒なのが、この値って直接引き算が出来ないこと。 だから、例えばある関数 a() の時間を計ろうと思って、
  struct timeval tv0, tv1;
  ...
  gettimeofday(&tv0, NULL);
  a();
  gettimeofday(&tv1, NULL);
  
としたあとに、(tv1 - tv0) なんて引き算は出来ません。 (tv1.tv_sec - tv0.tv_sec) * 1000 * 1000 + (tv1.tv_usec - tv0.tv_usec) として、マイクロ秒を計算します。
でも、普通の用途であれば、double にしちゅうのがお手軽です。 例えば、下のような関数を書きます。
double get_dtime(void){
  struct timeval tv;
  gettimeofday(&tv, NULL);
  return ((double)(tv.tv_sec) + (double)(tv.tv_usec) * 0.001 * 0.001);
}
gcc なら inline つけたほうがいいですね。
そこで、ある関数 a() の時間を計るなら、次のようにします。
double d0, d1;
d0 = get_dtime();
a();
d1 = get_dtime();
printf("elapsed: %f", d1 - d0);
(taiyop さん、ミスのご指摘ありがとうございました)

とても細かい時間を順番に計る

例えば、a() → b() → c() → d() と続く処理があって、これらの邪魔をせずに それぞれの時間を計って print したいとき。
予め配列を作ってやって、それに時間を格納していく。 それで、最後に表示する。
double d[5];
int i = 0;

d[i++] = get_dtime();
a();
d[i++] = get_dtime();
b();
d[i++] = get_dtime();
c();
d[i++] = get_dtime();
d();
d[i++] = get_dtime();

printf("a(): %f\n", d[1] - d[0]);
printf("b(): %f\n", d[2] - d[1]);
printf("c(): %f\n", d[3] - d[2]);
printf("d(): %f\n", d[4] - d[3]);
[an error occurred while processing this directive]