C 言語 | 構造体の宣言 | レジスター変数 - register
通常の変数は主記憶装置に保存される。register を付けて宣言した変数は、高速な CPU レジスターに配置される場合がある。実際にレジスターを使うかどうかはコンパイラーが判断する。
レジスターに保存する
関数内で頻繁に参照する変数がある。たとえば、画像処理をループで行う場合、ピクセル変換に使う変数へ何度もアクセスする。頻繁に参照する値は、より高速な記憶領域に保存するとよい。
C 言語では、そのような変数をレジスター変数として宣言できる。レジスターは CPU 内にある高速な記憶領域である。
通常の変数は主記憶装置に保存される。レジスターに値があれば、CPU が処理前に主記憶装置から値を転送する必要がないため、高速に動作できる。
register 指定子
register 型 変数名 ...
レジスターの数やサイズは物理的なコンピューターに依存する。レジスターへの保存が適切でない場合、コンパイラーは register 宣言を無視し、通常の変数として扱える。
レジスター変数は主記憶装置に配置されるとは限らないため、アドレスを取得できない。
コード 1
#include <stdio.h>
int main() {
register int i;
register int k;
i = 5;
k = i * 3;
printf("i = %d, k = %d\n" , i, k);
return 0;
}
このコードは i と k をレジスター変数として宣言する。実際にレジスターへ保存されるかどうかはコンパイラーに依存する。
現代のコンパイラーは十分にコードを最適化するため、現在では register 指定子を使う必要はほとんどない。