C言語で処理時間を短縮する
C言語で処理時間を短縮する方法として、記憶クラスregisterを使用するというのがあります。
registerはCPUのレジスタに変数の値を格納する領域を確保できれば確保するため、メモリ上に確保する通常の変数宣言と比べて高速に変数にアクセスできるようになります。
#include <stdio.h> #include <time.h> int main(int argc, char *argv[]){ register int a; int b; a = 0; b = 0; clock_t start,end; start = clock(); while(b < 10000000) { ++b; } end =clock(); printf("running time:%d[us]\n", (end - start)); start = clock(); while(a < 10000000) { ++a; } end = clock(); printf("running time:%d[us]\n", (end - start)); return 0; }
このプログラムを実行すると、
running time:18509[us] running time:2637[us]
およそ7倍速い結果が得られました。
CPUのレジスタには限りがあるため、レジスタに変数を格納できなければ同等のスピードになります。
また、全ての変数にレジスタが用意できるわけではないので、何でもかんでもレジスタにするのではなく、頻繁にアクセスする変数に限って宣言しなければ、十分な結果を得られません。(コンパイラは上から順番にレジスタを準備していくため)
さらに、コンパイラによってはregisterをサポートしていないこともあるらしいので、注意しましょう。
記憶クラスregisterを使用して処理時間を短縮する場合はレジスタについて十分理解して利用しましょう。