ホームページ > バックエンド開発 > C++ > 静的変数は C および C 実行可能ファイルのどこに保存されますか?

静的変数は C および C 実行可能ファイルのどこに保存されますか?

Barbara Streisand
リリース: 2024-12-30 12:07:12
オリジナル
198 人が閲覧しました

Where Are Static Variables Stored in C and C   Executables?

C および C における静的変数のストレージの詳細

静的変数は、C および C プログラミングにおいて重要な役割を果たし、オブジェクトの存続期間全体にわたってデータを保持できるようにします。プログラム。しかし、名前の衝突が発生しないようにするには、これらの変数は実行可能ファイルのどこに正確に格納されるのでしょうか?

次のコード スニペットを考慮してください:

// foo.c
static int foo = 1;
void fooTest() {
  static int bar = 2;
  foo++;
  bar++;
}

// bar.c
static int foo = 10;
void barTest() {
  static int bar = 20;
  foo++;
  bar++;
}
ログイン後にコピー

これらのファイルを main 関数でコンパイルおよびリンクするとき、 fooTest() と barTest() を繰り返し呼び出すと、printf ステートメントは独立してインクリメントされます。これは、foo 変数と bar 変数がそれぞれの翻訳単位に対してローカルであることを示します。

静的変数のストレージ割り当て

実行可能ファイル内の静的変数の割り当ては、初期化によって異なります。

  • ゼロ初期化: 静的データは次のように初期化されましたゼロは .BSS (シンボルによって開始されるブロック) セグメントに配置されます。このセグメントは、プログラムの実行中にゼロで埋められます。
  • 非ゼロ初期化: ゼロ以外の値で初期化された静的データは、.DATA セグメントに配置されます。このセグメントには初期化されたデータが含まれており、プログラムの開始時にメモリにロードされます。

ツールチェーンの依存関係

静的変数の具体的な格納場所は、使用されるツールチェーンによって異なる場合があります。この説明では、GNU Compiler Collection (GCC) を使用していると仮定します。

結論

C および C の静的変数は、実行可能ファイルの .BSS または .DATA セグメントに格納されます。ファイルの初期化に応じて。これにより、各静的変数に一意のメモリ位置が確保され、名前の衝突が防止されます。

以上が静的変数は C および C 実行可能ファイルのどこに保存されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート