私はcでメモリ割り当てを手に入れようとしていました。スタックセグメントと初期化されていないデータセグメントの違い
following linkによると、スタックと初期化されていないデータセグメントが異なり、ローカル関数の初期化されていないデータは、初期化されていないデータセグメントに移動します。
この場合、初期化されていないローカル変数を持つコードの場合、スタックセグメントには何が格納されますか?それは空ですか?
私はcでメモリ割り当てを手に入れようとしていました。スタックセグメントと初期化されていないデータセグメントの違い
following linkによると、スタックと初期化されていないデータセグメントが異なり、ローカル関数の初期化されていないデータは、初期化されていないデータセグメントに移動します。
この場合、初期化されていないローカル変数を持つコードの場合、スタックセグメントには何が格納されますか?それは空ですか?
ローカル関数の初期化されていないデータは、初期化されていないデータセグメントに移動します。
まあまあではありません。
読む慎重に、(from the same link、強調鉱山)
[...]初期化されていないデータは、データ・セグメントの終わりから始まり、はゼロに初期化または実行されているすべてのグローバル変数と静的変数が含まれていますソースコード内で明示的に初期化されていない [...]
したがって、自動ストレージ変数は、初期化されているかどうかにかかわらず、スタックセグメントに残ります。
つまり、これは「一般的な記憶表現」であり、普遍的ではないことに注意してください。 Cの標準では、スタックセグメント(または他のもの)を持つことは必須ではありません。
downvoteの理由は?私は何を取りこぼしたか? –
「geeksforgeeks」チュートリアルを読むことはお勧めしません。あなたにはいくつかの誤解があります。
.bss
セグメントは、実際には、ゼロ記憶されたの静的記憶期間の変数のストアです。明示的に値ゼロに初期化された変数を含みます。 静的記憶期間と異なる共通セグメントの例については、hereを参照してください。
固定保存期間の変数は、最終的に.bss
と.data
になります。ローカル変数は、スタックが初期化されているかどうかに関係なく、常にスタックまたはCPUレジスタに格納されます。非静的ローカル変数 -
(。これのどれもISO C標準によってではなく、業界のデファクトスタンダードで指定されていないことに注意してください)
"静的ストレージ期間"について詳しく教えてください。したがって、ローカルの静的初期化されていない変数は.dataになります。 –
@nalinkanoongoすべてが掲載されたリンクで説明されています。 – Lundin
入手しました。 –
のみスタックに割り当てられたデータをスタックに入ります。これは、変数が初期化されているかどうかにかかわらず適用されます。静的局所変数はデータセグメントに入ります。明示的に初期化されていない場合はBSSセクションに、ゼロ以外の値に初期化されている場合はデータセグメントの初期化された部分にある可能性があります。 –