私はこれについていくつかの考えを持っていました。最初に、グローバル変数の割り当ては、プログラムが最初に生成されたときに一度だけ割り当てられるため、関数を呼び出すたびにローカル変数を割り当てる必要があるため、高速に割り当てることができます。私の第二の考えは、ローカル変数がスタック上にあるので、それらはベースポインタレジスタを通してアクセスされるので、ローカル変数にアクセスするたびにベースポインタに格納された値をデクリメントする必要があります。グローバル変数は、データセグメント内の静的アドレスを介して直接アクセスされます。私の考えは正確ですか?グローバル変数はC言語のローカル変数より高速ですか?
2
A
答えて
5
これはむしろ不正確です。
コンピュータアーキテクチャーを学ぶ場合、最も速い記憶域はレジスタであり、その後にキャッシュがあり、その後にRAMが続くことがわかります。ローカル変数に関することは、可能であればコンパイラがレジスタから最適化するようにコンパイラを最適化するか、そうでない場合にはキャッシュから最適化することです。これがローカル変数がより速い理由です。
組み込みシステムの場合、ごくわずかなメモリモデルにコンパイルすることができます。この場合、データセグメントが現代のコントローラのSRAMキャッシュに収まる可能性があります。しかし、そのような場合には、ローカル変数の使用量が非常に逼迫している可能性があります。
結論:ほとんどの場合、ローカル変数はグローバル変数より高速です。
関連する問題
- 1. アセンブリ内のローカル変数:グローバル変数よりも高速ですか?
- 2. メタルシェーディング言語のグローバル変数
- 3. ローカル変数宣言迅速
- 4. C言語のグローバル変数を変更する
- 5. グローバル変数のないプログラミング言語はありますか?
- 6. Jinja2:ローカル/グローバル変数
- 7. エラーメッセージC言語での変数宣言
- 8. 変数をC言語のライブラリスコープにグローバルに保持する
- 9. javascriptのローカル変数とグローバル変数
- 10. C言語のスレッド間のグローバル変数同期
- 11. (python)私の変数はローカルかグローバルか?
- 12. Ocaml - グローバル変数とローカル変数
- 13. グローバル配列内の要素の位置を指すグローバル変数(C言語)
- 14. グローバル変数はCの自動変数にありますか?
- 15. ローカル変数、インスタンス変数、グローバル変数、およびクラス変数の違いは何ですか?
- 16. C言語の変数と関数
- 17. C言語でのextern変数のリンク
- 18. C#グローバル変数
- 19. C++印刷はC言語よりも非常に高速です
- 20. Gradleのグローバル変数宣言
- 21. Task.Factory.StartNew「アクション」の引数と、より高いレベルのローカル変数
- 22. クローンスクラッチスプライトの変数 - グローバルまたはローカル?
- 23. Pythonでのローカル変数とグローバル変数の使用
- 24. ローカル変数C
- 25. jquery-pluginのグローバル変数またはローカル変数
- 26. C言語のユーザー入力変数値
- 27. ループ内でmallocを使用して作成された変数に、ローカルで宣言された変数より高速にアクセスしていますか?
- 28. CとC++の静的グローバル変数とexternグローバル変数
- 29. グローバル変数宣言問題
- 30. ローカル変数アクセスがPythonのクラスメンバーアクセスよりも速いのはなぜですか?
「はい」または「いいえ」と答えることができる質問は、SO形式の*悪い*質問です。 –
はい、あなたがスコープの外に説明を残したからです。あなたはあなたの理解も信じるべきです、あなたはそれについてきちんと推論しており、それは理にかなっています。だからなぜ尋ねる? –
それは多くの要素に依存しますが、通常これを気にするのは無意味です。 –