2011-07-27 6 views
1

は例えば、私がしている:一般的に宣言された変数をグローバル変数として宣言することに利点はありますか?

char query[512]; 

は、MySQLデータベースに接続する自分のアプリケーションでは約27倍を宣言しました。

毎回同じサイズであり、多くの異なる機能で宣言されています。

このアプリケーションは決してスレッドを使用しません。

クエリは、snprintfでクエリが設定された直後に常に実行されます。 設定とクエリの実行との間に機能がありません。

これをグローバル変数として宣言することによるメリットやパフォーマンスの向上はありますか?

答えて

3

絶対に、消費されるメモリの観点から。各オブジェクトはバイト数を消費します。つまり、その特定の変数に対して27倍のメモリを消費する可能性があります。さらに、これらのオブジェクトを作成するためのオーバーヘッドはわずかです。全体として、これは大きな違いはありませんが、この種のシナリオで再利用することがベストプラクティスです。

1

パフォーマンスには利点がありますが、アプリケーションのサイズによっては無視できるものの、最適化されていない可能性があります。 推論には、バットからすぐにそれを宣言したグローバル変数があります。そのため、コンピュータはその変数がどこにあるのか正確に知っているので、変更するだけです。さもなければ、あなたは私が想像するように、いつも再利用できるものがあるかのように速くはないという再構築を続けなければなりません。

1

私はあなたのプログラムの先頭に割り当てられているので、他の変数よりも高速にアクセスするキャッシュメモリのようなグローバル変数の作業を知っています。スタック内の変数にメモリを割り当てる...グローバル変数として使用する

2

スタック変数へのアクセスは、通常、レジスタ内のポインタへのオフセットのアクセスと同じです。グローバル変数にアクセスするには、ほとんどの場合、まずグローバル変数のアドレスをロードする必要があります。

だから、桁を選択する場合は、スタック変数を使用します。他のコンパイラスイッチがオンになっている場合を除き、スタック使用のオーバーヘッドが増えます。

もちろん、実際のコンテキスト(CPU、プログラミング言語など)によって異なります。だからどちらかになる可能性がある。