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