5

以下を含むファイルtest.cがあるとしましょう:

char buffer1[1024];

int somefunction()
{
      char buffer2[1024];
      // do stuff
}

いくつかの関数呼び出しに属するフレームのスタックに buffer2 が割り当てられていることがわかりましたが、 buffer1 はどこに割り当てられていますか?

4

3 に答える 3

9

これらの変数は通常、BSS(ソースコードに明示的な初期化がない変数であるため、デフォルトで値0を取得します)またはデータセグメント(初期化されたデータ)にあります。ここでbuffer1は、が初期化されていないため、データセグメントの最後から始まるBSSセグメントに割り当てられる可能性があります。

bravegnuのWebサイトから:

ここに画像の説明を入力してください

于 2012-12-24T12:55:50.513 に答える
1

buffer1プログラムのstatic(bss / data)メモリセクションにメモリが予約されています。ここにすべての静的変数とグローバル変数が存在します。

これは、スタックやヒープのような3番目のメモリセグメントです。

于 2012-12-24T12:56:52.027 に答える
0

静的に宣言された配列は、ローカルで宣言された配列とは異なるストレージ仕様を持ちます。あなたが言ったように、ローカル配列buffer2は(通常)スタック上に作成され、静的配列buffer1は(通常)./bssまたは./dataセグメント上に作成されます。

于 2012-12-24T12:57:21.890 に答える