register

読み:レジスター
外語:register 英語
発音:rédʒistər 英語
品詞:名詞

C/C++予約語の一つで、変数をレジスター変数として定義する。

目次

Cと、C++11以降を除く古いC++では、autoと同様に変数の記憶クラスが自動であることを示す。

autoと違うのは、この変数の使用頻度が高いことを明示している点で、可能であれば変数をレジスターに割り当てることをコンパイラーに指示する。こうしてレジスターに割り当てられた変数はレジスター変数と呼ばれる。

但し、必ずしもレジスターに割り当てることができるとは限らず、その場合はautoが指定されたものと同様に処理される。

由来

C言語は高級アセンブリ言語として誕生した経緯もあり、その証拠ともなる機能の一つが、このレジスター変数である。

その名の通り、CPUのレジスターを直接利用することで高速な演算を可能とする(他の場合はメモリーに割り当てられる)。

プログラマーが明示することでコンパイラーの最適化の助けになるが、昨今のコンパイラーは性能が向上しており、わざわざregisterと書かなくても自動的にレジスターへの割り当てを行なうことがある。

制約

レジスター変数はブロック内に定義するか、または関数への引数として宣言される必要がある。CとC++で制約条件が若干異なる。

Cの場合

  • グローバル変数としてはレジスター変数を定義できない
  • レジスター変数を参照するためにポインターを使用することはできない
  • レジスター変数にはアドレスはないため、レジスター変数にアドレス演算子(&)を適用することはできない

C++の場合

  • 名前空間スコープ内でオブジェクトを宣言する時にレジスター変数は使用できない
  • Cとは異なり、C++ではレジスター変数のオブジェクトアドレスを得ることができる
用語の所属
予約語 (C)
予約語 (C++)
記憶クラス
関連する用語
auto

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club