メモリはヒープ、データ・セグメント、コード・セグメント、スタックという四つの部分にエリア分けされている。
ローカル変数、auto変数はスタックに配置される。スタック領域は、関数が呼び出された時点で確保され、関数の処理が終わると自動的に解放される。
グローバル変数、static変数はデータ・セグメント(静的記憶領域)に配置される。この領域に確保された変数の寿命はプログラム終了までである。
C言語のmalloc関数、C++やC++/CLI、C#のnew演算子などで動的に確保するメモリ領域はヒープに作成される。C言語、C++の場合、それぞれmalloc関数、delete演算子で確保したメモリは解放しなければならない。C++のnew演算子については、newヘッダファイルを読み込んでplacement newという特別なnew演算子を利用することができるようである。
スタックの特徴として、下から積んだデータは上からしか取り崩さない、言わば積み上げられた本や書類、ハノイの塔のような形態を取ることである。メモリの確保・解放はヒープより高速であるが、上限がヒープより小さいらしい。
C99から追加されたC言語、C++の可変長配列はヒープ・スタックどちらなのかよくわからない。
<参考URL>
・ITPro連載「よくわかるC言語(第4回・第9回)」
・碧色工房-blue studio-「C Programming(第15回)」
・金丸隆志「非情報系学生のための C/C++ 入門」講義資料第11回-02:new 演算子によるメモリの動的確保
・Programming Place Plus「C++編(言語解説) 第36章 placement new」
・C++マニアック,変数,local,global,variable,メモリ,memory,構築,消滅,construction,destruction,C++入門,C++講座
・C言語講座:関数や変数のメモリ配置
・電算職人のメモ置き場「.NET Frameworkはなぜ遅いといわれるのか #3」
ローカル変数、auto変数はスタックに配置される。スタック領域は、関数が呼び出された時点で確保され、関数の処理が終わると自動的に解放される。
グローバル変数、static変数はデータ・セグメント(静的記憶領域)に配置される。この領域に確保された変数の寿命はプログラム終了までである。
C言語のmalloc関数、C++やC++/CLI、C#のnew演算子などで動的に確保するメモリ領域はヒープに作成される。C言語、C++の場合、それぞれmalloc関数、delete演算子で確保したメモリは解放しなければならない。C++のnew演算子については、newヘッダファイルを読み込んでplacement newという特別なnew演算子を利用することができるようである。
スタックの特徴として、下から積んだデータは上からしか取り崩さない、言わば積み上げられた本や書類、ハノイの塔のような形態を取ることである。メモリの確保・解放はヒープより高速であるが、上限がヒープより小さいらしい。
C99から追加されたC言語、C++の可変長配列はヒープ・スタックどちらなのかよくわからない。
<参考URL>
・ITPro連載「よくわかるC言語(第4回・第9回)」
・碧色工房-blue studio-「C Programming(第15回)」
・金丸隆志「非情報系学生のための C/C++ 入門」講義資料第11回-02:new 演算子によるメモリの動的確保
・Programming Place Plus「C++編(言語解説) 第36章 placement new」
・C++マニアック,変数,local,global,variable,メモリ,memory,構築,消滅,construction,destruction,C++入門,C++講座
・C言語講座:関数や変数のメモリ配置
・電算職人のメモ置き場「.NET Frameworkはなぜ遅いといわれるのか #3」