C / C ++のパフォーマンスグローバル設定/取得メソッド対
-
20-08-2019 - |
質問
私はグローバルは悪いをしているかどうかについて尋ねるこの質問を見ます。
私はそれの波及効果について考えとして、唯一の引数は、私は、彼らがパフォーマンス上の理由であるかもしれないいくつかのケースでは必要だものを考え出すことができます。
しかし、私はそれについて本当によく分かりません。だから私の質問は、グローバルは、get / setメソッドの呼び出しを使用するよりも高速になり使用して、考えているのですか?
解決
より適切な比較は(静的)のグローバルとローカルのアクセスの間であろう。
実際にグローバルは、ローカルにアクセスすると、スタックポインタの値に加算されるオフセット変数を必要とするため、高速です。
しかし、あなたは決して、の今までにのこのことを心配する必要があります。書き込み可能な、あなたのコードが読み取り可能作り、そして作業などは関係のもの、に集中してみます。
他のヒント
良い近代的なコンパイラは、get / setメソッドが本当の違いはおそらくありませんよう呼び出しをインライン化する必要があります。
ほぼすべてのケースでは、静的/グローバルがあなたにとにかくほとんど検出不可能であることを行っているパフォーマンスへの影響、より頭痛を引き起こすことが起こっているかどうかを心配するはるかに重要です。
あなたはアセンブラで書くことにより、さらに多くのパフォーマンスを得ることができました。そしてまた、あなたのコードのデバッグに多くの時間を失っています。
これは、貿易のまったく同じタイプです。
これはわずかに速いが、高速ではない巨大な増加であるかもしれません。すべてのためにゲッターとセッターの機能を有する超えるグローバルにかかわらず、アプリケーションのサイズを抑えるん。サイズ削減のこのタイプは、アプリケーションに有益であるかどうかは、ターゲットとするプラットフォームに関連しています。例えば、組み込みアプリケーションを開発する際に、限られたメモリを備えたプラットフォームは、それが実行可能な解決策になることができます。
これは、CPUやコンパイラに依存します。それはオフセット16ビットの相対的に符号化することができないため、少なくとも一つの人気のあるPPCチップセットに、グローバル変数をロードする追加の命令を必要とする。
Plusは、それはキャッシュの局所性に巨大ながらくたを取るおよび/またはエイリアシングを負いません任意の最適化を破壊することができます。グローバルは、パフォーマンスを向上させることができることを仮定すると、ややナイーブである。