ベンチマークコード
標準のライブラリに恐らく存在するとは思いますが、time.hのclock関数の使い方に慣れるという意味で実装してみました。
#include <time.h> #include <stdio.h> double benchmark(int,void (*)(void)); double benchmark(int count,void (*func)(void)){ clock_t start,end; int i; start = clock(); for(i=0;i<count;++i){ (*func)(); } end = clock(); return (end - start) / (double)CLOCKS_PER_SEC; } void foo(void) { int i; for(i=0;i<100;++i) { i++; } } void bar(void) { int i; for(i=0;i<100;i+=2) {} } int main (void) { int count = 10000000; printf("%f sec\n",benchmark(count,foo)); printf("%f sec\n",benchmark(count,bar)); return 0; }
とても単純な仕組みです。benchmark関数を提供し、第一引数に検証回数を指定し、第二引数に検証する関数のポインタを渡します。
渡す関数ポインタは引数も戻り値も無い定義になります。
void (*func)(void);
ちょっとしたコードの検証をするのに役立てたいと思います。