<memory_resource>ヘッダーは、カスタマイズ可能なメモリ割当ポリシーを提供するためのインターフェイスをC++に導入しています。主な機能は以下の通りです。
memory_resourceクラス
編集- メモリ確保・解放のインターフェースを定義する抽象基底クラス
- 仮想関数
do_allocate
、do_deallocate
を派生クラスで実装する
polymorphic_allocatorクラステンプレート
編集memory_resource
を使ってメモリ確保・解放を行うアロケータ- 実行時に
memory_resource
を切り替えることができる
グローバルメモリリソース
編集new_delete_resource()
:::operator new/delete
用のリソースnull_memory_resource()
: 常に割り当てに失敗するリソースget_default_resource()
、set_default_resource()
: デフォルトのリソースの取得・設定
プールリソースクラス
編集synchronized_pool_resource
、unsynchronized_pool_resource
- メモリをプールから効率的に確保・解放するリソース
- アップストリームアロケータからメモリチャンクを取得してプールを構築
- マルチスレッド/シングルスレッド向けの2つのバージョン
monotonic_buffer_resource
編集- 単調増加のメモリ使用を前提としたリソース
- 解放されるまでメモリ使用量が増え続ける
- 一時的なバッファ用途に適している
このヘッダーでは、カスタムのメモリ割当ポリシーを実装したmemory_resource
の派生クラスを作成することができます。標準ライブラリ内のコンテナなどはpolymorphic_allocator
を使って、そのようなカスタムアロケータを利用可能です。メモリ確保のカスタマイズ性が大幅に向上しています。