2012-03-15 9 views

答えて

4

確かにわかる唯一の方法は、コンパイラのドキュメントを見て、それでregisterが何をするのかを記述していなければ、(標準で定義されたパラメータ内で)何かを行うことができます。

+0

AFAIKアップルではgccを使用していますが、私はそれが修正版であると言っている文書を見つけることができませんでした。 –

1

registerは、コンパイラの推奨ヒントです。変数が実際にレジスタに配置されることは保証されません。

使用可能なスペアレジスタがない場合でも、変数はスタックに残ります。

+0

私が知りたいのは、常に無視されるか、コンパイラが可能であればそれをレジスタに割り当てることです。 –

+0

それは無視されることはありませんが、言われたように、それは唯一のヒントであり、注文ではありません。 – ydroneaud

+0

@ydroneaudどうやって分かりますか? K&Rでは、「コンパイラはアドバイスを無視してもかまいません」と言われています。私はこのコンパイラが何かをしようとするかどうか知りたいです。 –

0

registerキーワードはCPUのハードウェアレジスタを参照していません。変数registerの任意の型を宣言でき、ハードウェアレジスタに決して適合しない型も宣言できるので、できません。

このような変数のアドレスを決して使用しないことは、コンパイラと契約しているだけです。あなたからのこのような約束は、コンパイラの最適化の作業を容易にします。特に、変数はエイリアス化することはできません。より一般的には、直接制御フローの外側から変更することはできません。

+0

通知なしにdownowingワウ。そこに何か事実上間違っていますか? –

関連する問題