2012年9月10日月曜日

メモリマップについて

プログラムのメモリはその確保場所から3つのセグメントに大別できる。
テキストセグメント、データセグメント、スタックセグメントである。

テキストセグメント
-プログラムの実行部分(コード部分)が含まれる。
-上書きされるとまずいため、書き込み保護された領域に書き込まれる。
-文字列定数もココに書き込まれる。またconst intで宣言したglobal変数もここ。
 -要するに読み込み専用のものはテキストセグメントに含まれる。

データセグメント
-mallocにより確保されるヒープ領域、グローバル変数が格納されるBSS,データ領域に更に細かく分けられる。BSSはBlock started by Symbolの略、プログラムがメモリ上にロードされた時に初期値0が書き込まれる(ポインタの場合はNULLが書き込まれる)。

スタックセグメント
-ローカル変数、復帰情報、引数、関数の戻り値などが一時的に収められる場所

static変数はどこ
-データの書き換えができるかつ、関数の終了とともに消滅しない->消去法的にデータセグメントに割り当てられる。

0 件のコメント:

コメントを投稿