4

私はこれを読んでいましたが、registerキーワードは次の C++ 標準から削除される可能性が高いと書かれています。また、それregisterは 2011 年に廃止されたとも書かれています。では、registerストレージ クラス指定子の何が問題になっているのでしょうか。

最近のコンパイラは非常にスマートで、頻繁に使用される変数を速度 (高速アクセス) のために暗黙的に最適化し、それらを CPU レジスタに配置します。

ただし、C++ の専門家は、 を使用しない、または使用しないとも言っていますregisterregisterでは、キーワードの問題点は何でしょうか。

4

2 に答える 2

9

あなたは自分の質問にほとんど答えました:

最近のコンパイラは非常に賢いと思うので、頻繁に使用される変数を速度 (高速アクセス) のために暗黙的に最適化し、それらを CPU レジスタに配置します。

まさにそれがポイントです。最近のオプティマイザはレジスタ割り当てが非常に得意であるため、プログラマがregisterキーワードを介して意図を強制しようとすると、ペシミサチンにつながる可能性が高く、コンパイラによって単に無視されます。registerこれは拘束力のある要件ではなく、常にコンパイラへの単なるヒントであることを忘れないでください。彼らがそのようなヒントを正当に嘲笑するようになった今、キーワードは単に時代遅れで役に立たない.

したがって、「何が問題なのか」という質問に直接答えるには、これまでにあった唯一の目的 (「このことをレジスターに入れるためのコンパイラーへのヒント」) が現在では何の役にも立ちません。コンパイラは、人間よりもはるかに優れています

于 2015-05-23T16:59:28.427 に答える
1

register標準では、その変数をレジスタに入れる必要はありません。代わりに、よく使用される変数のコンパイラのヒントにすぎません。そして、コンパイラはそれを独自に決定できます。

registerここで、投稿したリンクのキーワードに関する句:

指定子は、そのregisterように宣言された変数が頻繁に使用されるという実装へのヒントです。[: ヒントは無視できます。ほとんどの実装では、変数のアドレスが取得された場合は無視されます。この使用は非推奨です (D.2 を参照)。--巻末注記

于 2015-05-23T17:02:17.477 に答える