2016-12-14 10 views
2

私はこれについていくつかの考えを持っていました。最初に、グローバル変数の割り当ては、プログラムが最初に生成されたときに一度だけ割り当てられるため、関数を呼び出すたびにローカル変数を割り当てる必要があるため、高速に割り当てることができます。私の第二の考えは、ローカル変数がスタック上にあるので、それらはベースポインタレジスタを通してアクセスされるので、ローカル変数にアクセスするたびにベースポインタに格納された値をデクリメントする必要があります。グローバル変数は、データセグメント内の静的アドレスを介して直接アクセスされます。私の考えは正確ですか?グローバル変数はC言語のローカル変数より高速ですか?

+3

「はい」または「いいえ」と答えることができる質問は、SO形式の*悪い*質問です。 –

+0

はい、あなたがスコープの外に説明を残したからです。あなたはあなたの理解も信じるべきです、あなたはそれについてきちんと推論しており、それは理にかなっています。だからなぜ尋ねる? –

+2

それは多くの要素に依存しますが、通常これを気にするのは無意味です。 –

答えて

5

これはむしろ不正確です。

コンピュータアーキテクチャーを学ぶ場合、最も速い記憶域はレジスタであり、その後にキャッシュがあり、その後にRAMが続くことがわかります。ローカル変数に関することは、可能であればコンパイラがレジスタから最適化するようにコンパイラを最適化するか、そうでない場合にはキャッシュから最適化することです。これがローカル変数がより速い理由です。

組み込みシステムの場合、ごくわずかなメモリモデルにコンパイルすることができます。この場合、データセグメントが現代のコントローラのSRAMキャッシュに収まる可能性があります。しかし、そのような場合には、ローカル変数の使用量が非常に逼迫している可能性があります。

結論:ほとんどの場合、ローカル変数はグローバル変数より高速です。

関連する問題