register
の使用は、最新のコンパイラでは廃止されました。それを使用しないでください。
これは、どの変数が最も頻繁にアクセスされるかを判断するのに十分スマートではないため、レジスタ内に永続的な場所を割り当てる必要があったのです。しかし、現代のコンパイラは、スタティック・シングル・アサインメントやレジスタ・アロケーションなどのテクニックを使用しています。これは、変数がレジスタ内にあるときと、メモリに書き込まれるべき時を知る上でコンパイラがはるかに優れているためです。
さらに、register
は、その変数に制限を設けています。ポインターはメモリの場所を指し、変数は(少なくとも概念的には)メモリにないため、register
変数へのポインターを持つことはできません。 register
変数は自動変数でなければなりません。これは一般に「スタック」変数と呼ばれます。したがって、関数内のローカル変数でなければならず、static
またはextern
という修飾語ではありません。
要するに、register
を使用すると、最新のコンパイラでパフォーマンスが向上することはありませんが、はにプログラマーの頭痛をもたらします。早期最適化の最大の武器 - 実行時間の節約を間違った約束を持つプログラマー時間の無駄 - が再び襲います。
このキーワードの解釈は誤解を招きます。 –
@Matt Joiner:本当ですか?何故ですか? – Cratylus