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 サイトの他の関連記事を参照してください。