山口屋~活動日誌~

私生活で主な出来事をピックアップ

メモリ C言語 C++ C++/CLI C#

2010-12-07 23:01:40 | ソフトウェア開発
メモリはヒープ、データ・セグメント、コード・セグメント、スタックという四つの部分にエリア分けされている。

ローカル変数、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」
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする