16
CおよびC ++の静的変数はどこに保存されますか?
実行可能ファイルのどのセグメント(.BSS、.DATA、その他)に静的変数が格納されているため、名前の衝突が発生しませんか?例えば: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; printf("%d,%d", foo, bar); printf("%d, %d", foo, bar); } } 両方のファイルをコンパイルして、fooTest()とbarTestを繰り返し呼び出すメインにリンクすると、printfステートメントは個別に増分します。fooおよびbar変数は翻訳単位に対してローカルであるため、理にかなっています。 しかし、ストレージはどこに割り当てられていますか? 明確にするために、ELF形式でファイルを出力するツールチェーンがあることを前提としています。したがって、これらの静的変数のために実行可能ファイルに予約されたスペースが必要になると思います。 議論のために、GCCツールチェーンを使用すると仮定します。