以下を含むファイルtest.cがあるとしましょう:
char buffer1[1024];
int somefunction()
{
char buffer2[1024];
// do stuff
}
いくつかの関数呼び出しに属するフレームのスタックに buffer2 が割り当てられていることがわかりましたが、 buffer1 はどこに割り当てられていますか?
buffer1
プログラムのstatic(bss / data)メモリセクションにメモリが予約されています。ここにすべての静的変数とグローバル変数が存在します。
これは、スタックやヒープのような3番目のメモリセグメントです。
静的に宣言された配列は、ローカルで宣言された配列とは異なるストレージ仕様を持ちます。あなたが言ったように、ローカル配列buffer2
は(通常)スタック上に作成され、静的配列buffer1
は(通常)./bss
または./data
セグメント上に作成されます。