ヒープ領域とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > ヒープ領域の意味・解説 

ヒープ領域

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/10/03 02:17 UTC 版)

ヒープ領域: heap area, heap memory)はコンピュータープログラミングにおいて、動的に確保可能なメモリの領域。ヒープ (heap) とは、『山積み』という言葉の中の『山』をさす英単語である。

データ構造ヒープとは直接的な関係は無い。

概要

ヒープ領域は、2種類のラベルを持つ双方向リストによって構成されている。初期状態では、リストはひとつの「未使用」ノードが全体を占めていて、メモリ確保ルーチン(C言語malloc関数、C++のnew演算子等)によって、「未使用」ノードから必要な分を切り取って「使用中」ノードと「未使用」ノードに分ける。確保したメモリが不要になった場合には、メモリ解放ルーチン(C言語のfree関数、C++のdelete演算子等)によってノードのラベルを「未使用」に書き換える。

動的に確保したヒープメモリ領域は、メモリ確保ルーチンから返却されるポインタ参照によって間接的に管理するが、動的に確保したメモリが不要になった場合、解放し忘れるとメモリリークにつながる。プロセスが動的確保したヒープメモリは、プロセス終了時にオペレーティングシステム (OS) によって自動的に解放されるが、長時間動作をし続けるソフトウェアでは、メモリリークは大きな問題になる。C++ではデストラクタを利用して解放を自動化することが多い(RAII)。ヒープメモリの明示的な解放を必要とせず、どこからも参照されなくなったメモリ領域を自動的に解放する「ガベージコレクタ」を組み込み機能として備えているプログラミング言語もある。

ヒープ領域により、変数を動的に確保できる利点がある。ユーザーによって入力される可変サイズのデータを処理するときなど、必要なメモリの大きさが静的に決まらない場合に有用である[注釈 1]。欠点としては領域の確認・確保の時間にばらつきがあり、処理時間の見積もりが困難になることと、領域の確保と解放の繰り返しによりメモリの断片化(後述)が発生することが挙げられる。

「未使用ノード」と「使用中」ノードが混在し、ヒープの未使用領域がバラバラに分断された状態を断片化(フラグメンテーション)状態と呼ぶ。断片化した領域が増えていくと、(空きメモリの合計値は十分であっても)連続した大きなメモリ確保ができなくなってしまう。そのため、解放のつど、あるいはカウンタによって一定水準に達したとき、連続した個々の「未使用」ノードを結合し、大きな「未使用」ノードに還元する。「未使用」ノードが不足した場合には、オペレーティングシステムに領域拡大を要求しヒープ領域を拡大するか、飛び飛びの未使用領域を連続した未使用領域に統合する。これをメモリコンパクション (memory compaction) という[2][注釈 2]

断片化を起こしにくいヒープ (low-fragmentation heap; LFH) を使用するように、アプリケーションからメモリ確保ポリシーを指定できるOSもある[3]

脚注

注釈

  1. ^ GNU拡張およびC99には可変長配列 (VLA) の機能があるが、これはヒープではなくスタック上にメモリを確保するものであり、スタックの上限を超えて確保をしようとするとスタックオーバーフローを引き起こす危険性がある[1]
  2. ^ メモリコンパクションはガベージコレクション (garbage collection) とは別物だが、OSが持つ機能とは別に、各種プログラミング言語におけるガベージコレクタが持つ動作のひとつとして実装されていることもある。

出典

関連項目




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ヒープ領域」の関連用語

ヒープ領域のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ヒープ領域のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのヒープ領域 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS