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;
}

このコードは ik をレジスター変数として宣言する。実際にレジスターへ保存されるかどうかはコンパイラーに依存する。

現代のコンパイラーは十分にコードを最適化するため、現在では register 指定子を使う必要はほとんどない。