3

gcc は、グローバル変数をレジスタ格納変数として定義するサポートを提供していると読みました。私が知りたいのは、標準にこのサポートの仕様があるかということです。

4

5 に答える 5

5

C のキーワードregisterがハードウェア レジスタに関するものであるという一般的な誤解があります。それがその概念の起源かもしれませんが、現代の C ではこれが目的ではありません。register持っている唯一の実際の効果は、その&ような獣では許可されていないということです.

それらは、コンパイラが望む任意の方法、ハードウェアレジスタ、命令の即時、またはスタック上で実現される可能性があります。あなたが知っていることは、register変数は他の変数とエイリアスできないということです。

そして、あなたの質問にもっと直接的に答えるために、no registerin file scope は C 言語の一部ではありません。もしそうなら、それはほとんどすべてのベースの変数を宣言することを可能にしregister const、ある種のグローバル定数として機能することができます.

ハードウェア レジスタを特定の変数にマッピングすることは、gcc などのコンパイラが提供する拡張機能です。拡張機能としての Gcc の機能は、ファイル スコープでも機能します。しかし、通常、CPU には余裕のあるハードウェア レジスタがあまりないため、これは非常に法外なことです。

于 2015-07-24T10:19:15.550 に答える