メモリプール

From Wikipedia, the free encyclopedia

メモリプール (Memory pools) は、en:固定サイズブロック割り当てとも呼ばれ、メモリ管理プール英語版を使用することで、mallocまたはC++new演算子に匹敵する動的メモリ確保を可能にするプール。

多くのリアルタイム・オペレーティング・システムは、トランザクション処理機能などのメモリプールを使用する。

これらの実装ではブロック・サイズが可変であるために断片化英語版が発生するため、パフォーマンスの点から、リアルタイムシステムでの使用は推奨できない。より効率的な解決策はメモリプール(memory pool)と呼ばれる同じサイズの多数のメモリ・ブロックを事前に割り当てることである。アプリケーションは実行時ハンドル英語版で表されるブロックの割り当て、アクセス、および解放ができる。

WebサーバーNginxのような一部のシステムでは、メモリプール という用語は、後で一度に割り当てを解除できる可変サイズの割り当てのグループを指すために使用される。

これはリージョン としても知られており、リージョンベース・メモリ管理英語版を参照されたい。

簡易メモリプール実装

簡易メモリプール・モジュールは(たとえば)、コンパイル時にモジュールをデプロイするアプリケーションに最適化されたブロック・サイズで3つのプールを割り当てることができる。

アプリケーションは次のインターフェイスを通じてメモリの割り当て、アクセス、解放を行うことができる:

  • プールからメモリを割り当てる。この関数は必要なブロックが収まるプールを決定する。そのプールのすべてのブロックがすでに予約されている場合、関数は次に大きいプールでブロックを見つけようとする。割り当てられたメモリ・ブロックはハンドル英語版で表される。
  • 割り当てられたメモリへのアクセス・ポインタを取得する。
  • 以前に割り当てられていたメモリ・ブロックを解放する。
  • ハンドルは(たとえば)、unsigned intで実装できる。モジュールはハンドルをプール・インデックス、メモリ・ブロック・インデックス、バージョンに分割することで内部的に解釈できる。プールとメモリ・ブロック・インデックスにより、ハンドルを使用して対応するブロックへの高速アクセスが可能になる一方、新しい割り当てごとにバージョンが増加するため、これによりメモリ・ブロックが既に解放されている(保持期間が長すぎる)ハンドルを検出できる。

mallocとの比較

関連項目

外部リンク

Related Articles

Wikiwand AI