ホームページ >バックエンド開発 >C++ >静的変数は C と C のどこに割り当てられますか?

静的変数は C と C のどこに割り当てられますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 15:06:121003ブラウズ

Where Are Static Variables Allocated in C and C  ?

C および C での静的変数の割り当て

C および C では、異なる翻訳単位間の名前の競合を避けるために、静的変数は実行可能ファイルの特定のセグメントに割り当てられます。提供されたコード内の foo.c ファイルや bar.c ファイルなど、複数のソース ファイルをコンパイルする場合、各翻訳単位は静的変数の独自のコピーを作成します。

静的変数が保存される場所は、ゼロに初期化されるかどうか。ゼロで初期化された静的変数は .BSS セグメントに配置され、ゼロで初期化されていない静的変数は .DATA セグメントに配置されます。

指定された例では、foo と bar の両方がゼロ以外の値に初期化されます。したがって、.DATAセグメントに配置されます。コンパイラは、これらの変数用に .DATA セグメントにスペースを予約し、それらの値はそこに保存されます。

実行可能ファイルがリンクされると、.DATA セグメントと .BSS セグメントの内容が、.DATA セグメントの適切なセクションにコピーされます。 ELF ファイル。通常、.DATA セグメントは .text (コード) セクションにマージされますが、.BSS セグメントは実行時にプログラムのメモリの BSS 領域に割り当てられます。

GCC ツールチェーンでは、静的ファイルの場所-Xlinker -d' オプションを使用して変数を調べることができます。これにより、ELF セクションとその内容が表示されます。 .data セクションと .bss` セクションを調べることで、静的変数の割り当てを検証し、それらが互いに競合していないことを確認できます。

以上が静的変数は C と C のどこに割り当てられますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。