C++メモ:メモリ領域の種類

Posted: 2011年7月9日 カテゴリー: プログラミングメモ, C++メモ
タグ:, , , , , , , ,

注:今回のメモは、参考資料からのもろパクリに近いので、気になる時は参考資料のページを見てください。

C++には五つのメモリ領域(変数、オブジェクトなどを保存する領域)が有り、それぞれ違う用途と特徴が有ります。なお、この記事は簡潔に特徴を書いているので詳しい事は参考資料のページに載っています。

Stack(スタック) – スタックは自動的に作られた変数などを保存します。オブジェクト(変数)は宣言と同時に作成され、そのオブジェクトが作られたスコープから出たら破棄されます。(例:if()文の{}内で宣言されたオブジェクトは、if文の終わりと共に破棄されます)。スタックはヒープなど動的のメモリ領域に比べ構造がシンプルなので、比べると実行速度はかなり早いです。

Heap (ヒープ) – ヒープはmallocを使い動的に宣言された変数を保存するメモリ領域です。

Free Store – Free Storeはnewを使い動的に宣言された変数を保存するメモリ領域です。Newとdeleteはコンパイラによってはmallocとfreeを使い実装されていますが、HeapとFree Storeは別のメモリ領域なので、片方で作られたオブジェクトはもう片方から安全に破棄できるとは限られません。

Const (コンスタント)–  Const領域はコンパイル時に値が解る変数を保存するメモリ領域です(クラスオブジェクトはここには保存されません)。Const領域に保存されている値はプログラムが実行されている限り存在し、値の変更も出来ません。

Global (グローバル) – グローバル領域にはグローバル変数とスタティック変数がプログラムの起動時に割り当てられ、実行時に初期化されます(例:関数内のstatic変数はその関数が始めて呼ばれた時に初期化されます)。

参考元:

Guru of the week #9:

http://www.gotw.ca/gotw/009.htm

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中