1

Cでコンパイラが使用するアクセス指定子を知る方法はありますか. たとえば、レジ​​スター変数の場合、変数のアクセス指定子が auto か register かはすべてコンパイラーに依存します。コンパイラによって選択されたアクセス指定子を動的に知る方法はありますか??

4

3 に答える 3

3

言語の仕様レベルと機械語でのプログラムの実現を混同しています。ここでの「登録」という2つの用語は、大まかに関連しているだけです。

キーワードの言い回しはregister紛らわしい、誤称です。registerそのような変数のアドレスを取得することが許可されていないことを意味するだけです。コンパイラがスタック上の変数を認識して直接アドレス指定するか、CPUレジスタに格納するかどうかは、信頼できる安定したものではありません。コンパイラごとにコンパイラのバージョンと最適化レベルが変わります。

他の人が言ったように、マイクロ最適化に興味がある場合は、特定のコンパイルについて知るためにアセンブラーを読むことができますが、一般的には心配する必要はありません。

于 2011-08-09T09:55:01.853 に答える
1

アーキテクチャに応じて、変数のアドレスを取得してヒントを得ることができます。しかし、このアプローチでは、コンパイラがレジスタではなくメモリに変数を割り当てるように強制される可能性があります。

于 2011-08-09T09:30:10.503 に答える
1

C モジュールをアセンブリにコンパイルし、それを読み取ります。一部のコンパイラは、リンクの直前にプログラム全体の最適化を実行する場合があるため、アセンブラの出力でさえ 100% 信頼できるわけではないことに注意してください。

于 2011-08-09T09:37:51.963 に答える