グローバルが悪いかどうかを尋ねるこの質問を見ました。
その影響について考えてみたところ、場合によっては必要であるという唯一の議論は、パフォーマンス上の理由によるものかもしれません。
しかし、私はそれについてよくわかりません。私の質問は、get/set メソッド呼び出しを使用するよりもグローバルを使用する方が高速でしょうか?
最新の優れたコンパイラーは、get / setメソッド呼び出しをインライン化して、おそらく実際の違いがないようにする必要があります。
ほとんどの場合、静的/グローバルが頭痛の種になるかどうかを心配することの方が、パフォーマンスへの影響よりもはるかに重要です。パフォーマンスへの影響は、とにかくほとんど検出されないでしょう。
より適切な比較は、グローバル(静的)とローカルへのアクセスの比較です。
実際、ローカルにアクセスするには変数オフセットをスタックポインターの値に追加する必要があるため、グローバルの方が高速です。
ただし、これについて心配する必要はありません。コードを読み取り可能、書き込み可能、動作可能にするなど、重要なことに集中してみてください。
アセンブラで書き込むことにより、さらにパフォーマンスを向上させることができます。また、コードのデバッグにより多くの時間を失うことになります。
それはまったく同じタイプの取引です。
少し速くなるかもしれませんが、速度が大幅に向上するわけではありません。ただし、すべてに対してgetterおよびsetter関数を使用することを超えるグローバルは、アプリケーションのサイズを小さくします。このタイプのサイズの節約がアプリケーションに有益であるかどうかは、ターゲットとするプラットフォームに関連しています。たとえば、メモリが限られているプラットフォームである組み込みアプリケーションを開発する場合、それは実行可能なソリューションになる可能性があります。
CPUとコンパイラに依存します。少なくとも 1 つの一般的な PPC チップセットでは、16 ビットの相対オフセットでエンコードできないため、グローバル変数をロードするには追加の命令が必要です。
さらに、キャッシュの局所性に大きな問題が発生したり、エイリアシングを想定していない最適化を破棄したりする可能性があります。グローバルがパフォーマンスを向上させることができると仮定することは、やや単純です。