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
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅