メモリ管理 レッスン5
メモリレイアウト
テキスト・データ・BSS・ヒープ・スタックセグメントを学びましょう。
プロセスのメモリレイアウト
Cプログラムのプロセスメモリは複数のセグメントに分かれています。 それぞれ役割が異なり、変数の種類によってどのセグメントに置かれるかが決まります。
- テキスト(コード)セグメント: 実行コード(読み取り専用)
- データセグメント: 初期化済みグローバル・static変数
- BSSセグメント: 未初期化グローバル・static変数(ゼロ初期化)
- ヒープ: malloc/calloc で確保される領域(低アドレスから高アドレスへ成長)
- スタック: ローカル変数・関数呼び出し情報(高アドレスから低アドレスへ成長)
各セグメントの変数例
変数の種類によって格納されるセグメントが異なります。
Cエディタ
static 変数のメモリ
static ローカル変数はスタックでなくデータセグメントに置かれ、関数呼び出しをまたいで値が保持されます。
Cエディタ