[解決済み】CやC++で静的変数はどこに格納されているのか?
2022-04-13 12:19:37
質問
静的変数は、実行ファイルのどのセグメント(.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を繰り返し呼び出すmainにリンクすると、printf文が独立してインクリメントされます。 fooとbarの変数は翻訳ユニットに対してローカルなので、理にかなっています。
しかし、そのストレージはどこに割り当てられているのでしょうか?
はっきり言って、ELF形式のファイルを出力するようなツールチェインを持っていることが前提です。 したがって、私
信じる
その
があります。
は、実行ファイルにこれらの静的変数のためのスペースが確保されている必要があります。
議論のために、GCCツールチェインを使うと仮定しましょう。
どのように解決するのですか?
静止画の行き先は、静止画が次のようなものであるかどうかによります。 ゼロ初期化 . ゼロイニシャライズ 静的データは .BSS(ブロック・スタート・バイ・シンボル) , 非ゼロ初期化 のデータは .DATA
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】'cout'は型名ではない
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++の余分な資格エラー
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] C言語で変数はメモリのどこに格納されていますか?
-
[解決済み] CとC++における「const static」の意味とは?