2

グローバル変数はデータ セグメントに割り当てられ、ローカル変数はスタックに残ります。ヒープに格納された変数へのアクセスがローカル変数へのアクセスよりも遅いことは知っていますが、ローカル変数へのアクセスがグローバル変数へのアクセスよりも速いかどうかはわかりません。コンパイラに依存しますか?違いは重要ですか?

4

2 に答える 2

5

スタックとヘッドは実装の詳細にすぎません。つまり、コンパイル環境に依存する可能性があります。C 標準では、識別子のリンケージと保存期間のみが定義されています。しかし、その通りです。スタック、ヒープ、およびデータ セグメントが一般的な実装です。

しかし、ヒープに格納された変数へのアクセスがローカル変数へのアクセスよりも遅いと言うのは間違っています。動的メモリの割り当てと割り当て解除は、実際には自動変数を使用するよりも複雑で時間がかかりますが、それらの有効期間中、アクセス(読み取りまたは書き込み) のコストはまったく同じです (少なくとも一般的なインフラストラクチャでは)。違いは次のとおりです。

  • プロセッサ キャッシュまたはレベル 2 キャッシュ内のデータです (アクセスを高速化します)
  • ディスクからリロードする必要がある、現在スワップされているページ内のデータです (アクセスが遅くなります)

ただし、動的、自動、また​​は静的データの場合、どちらも同じように発生する可能性があります...

于 2016-10-14T08:55:55.793 に答える