C/C++言語のメモリマッピング
アドレス
領域のなまえ
説明
関数内にある局所変数や、関数への引数、戻り値などに割り当てられるのがスタック領
域です。
C言語では、static 変数でない局所変数、および関数への引数や戻り値に割り当てられ
ます。ヒープ領域と異なり、実行中にスタック領域のサイズは変化しません。
そのため、変数を宣言しすぎたり、あまりにも大きな配列などを宣言するとクラッシュ
し、Segmentation Fault が出ます。
0
xFFFFFFFF
↓
↓
↓
↓
スタック領域
また、スタック領域のアドレスは、ヒープ領域とは逆で、先に確保したものから大きい
順に割り当てられます。
未使用領域
動的にメモリ領域の確保や解放を行うのがヒープ領域です。
↑
↑
↑
C言語では、malloc() 、C++では new 演算子により確保されたメモリ領域がヒープ領域
となります。動的にサイズが確保されるため、実行中にヒープ領域のサイズが変化しま
す。また、ヒープ領域のアドレスは先に確保したものから小さい順に割り当てられます。
ヒープ領域
0
x0013a0b1
プログラムの中で初期値をもつような変数に割り当てられる領域です。C言語では、0以
外の初期値をもつ静的変数・広域変数に割り当てられます。
データセグメント
コードセグメント
プログラムの中で機械語の部分、つまりCPUの命令コードが格納されている領域です。
また、テキスト領域は読み出し専用となので、プログラム上でテキスト領域に書き込も
うとすると割り込みが発生します。
0
x00000000