<memory_resource>ヘッダーは、カスタマイズ可能なメモリ割当ポリシーを提供するためのインターフェイスをC++に導入しています。主な機能は以下の通りです。

memory_resourceクラス

編集
  • メモリ確保・解放のインターフェースを定義する抽象基底クラス
  • 仮想関数do_allocatedo_deallocateを派生クラスで実装する

polymorphic_allocatorクラステンプレート

編集
  • memory_resourceを使ってメモリ確保・解放を行うアロケータ
  • 実行時にmemory_resourceを切り替えることができる

グローバルメモリリソース

編集
  • new_delete_resource() : ::operator new/delete用のリソース
  • null_memory_resource() : 常に割り当てに失敗するリソース
  • get_default_resource()set_default_resource() : デフォルトのリソースの取得・設定

プールリソースクラス

編集
synchronized_pool_resourceunsynchronized_pool_resource
メモリをプールから効率的に確保・解放するリソース
アップストリームアロケータからメモリチャンクを取得してプールを構築
マルチスレッド/シングルスレッド向けの2つのバージョン

monotonic_buffer_resource

編集
  • 単調増加のメモリ使用を前提としたリソース
  • 解放されるまでメモリ使用量が増え続ける
  • 一時的なバッファ用途に適している

このヘッダーでは、カスタムのメモリ割当ポリシーを実装したmemory_resourceの派生クラスを作成することができます。標準ライブラリ内のコンテナなどはpolymorphic_allocatorを使って、そのようなカスタムアロケータを利用可能です。メモリ確保のカスタマイズ性が大幅に向上しています。