私は自動的にベンチに巧妙なマクロCの「プロセス」を作成することが可能であるならば不思議とだけC.だが、私はこのような小さな構造を持っているとしましょう使用しています:Cで自動的にベンチマークするための巧妙なマクロを作成する方法ですか?
typedef struct pbench {
char description[256];
int nbenchs;
double times;
} ProcessBench;
とマクロ(とget_time()
)はdoubleを返す関数である:
#define BENCH(process, bench_struct, description) \
int i; \
bench_struct.description = description; \
bench_struct.nbenchs = 50; \
double start = get_time(); \
for (i = 0; i < bench_struct.nbenchs; ++i) \
process(); \
bench_struct.times = get_time() - start;
私は間違っていない場合は、このマクロは、ベンチマークにBENCH(func, func_bench, func_description)
を使用して署名void func()
で任意の関数を使用することができます。
void func_args(args...)
、return_type func_return()
、return_type func_return(args...)
、さらには小さな行のようなベンチマーク機能にこのようなマクロを作成する方法はありますか?
機能も動作するマクロを使用しないでください。 – Olaf
@Olaf:Cの関数でこれを行うことは困難です。特に、時間指定された関数に任意のパラメータが必要な場合は特にそうです。 –
@PaulR:私はOPが示すものを参照します。パラメータはありません。しかし、この文脈で "プロセス"とは何を意味するのかは不明です。あるいは、2つの関数とマクロの混合がオプションになります。いずれにしても、上記のマクロは私にとってはとても元気ではありません。 – Olaf