最終更新日時(UTC):
が更新

履歴 編集

function
<memory_resource>

std::pmr::pool_resource::do_allocate(C++17)

void* do_allocate(std::size_t bytes, std::size_t alignment) override;

概要

要求されたサイズおよびアライメントでメモリを割り当てる。

割り当てられた領域のサイズと配置・要件等はmemory_resource::do_allocate()に従う。

事前条件

alignmentは2の累乗であること

引数

  • bytes -- 割り当てるメモリのサイズ
  • alignment -- 割り当てる領域へのアライメント要求

効果

bytes以上で最小のブロックサイズの内部メモリプールからメモリを割り当てる。
そのようなブロックサイズのプールが枯渇している場合、上流メモリリソースからプールを補充しメモリ割り当てを行う。
プールの補充はチャンク単位で行われ、補充の度にチャンクサイズは増加する。その上限はコンストラクタで渡したpool_options::max_blocks_per_chunkか、実装定義の最大値が設定される。

また、bytesが設定されている最大のブロックサイズを超える場合は上流メモリリソースから直接メモリを割り当てる。

少なくともbytesのメモリを割り当て、alignmentにアラインする。

戻り値

割り当てた領域の先頭へのポインタ

例外

this->upstream_resource()->allocate()が例外を投げないのならば、この関数も例外を投げない。

バージョン

言語

  • C++17

処理系

関連項目

参照