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

履歴 編集

function template
<memory>

std::allocator_traits::alloacte_at_least(C++23)

[[nodiscard] static constexpr
allocation_result<pointer, size_type>
  allocate_at_least(Alloc& a, size_type n); // (1) C++23

概要

指定した要素数以上のメモリを確保する。

多くのメモリアロケータはメモリ確保時に指定されたサイズちょうどではなく、少し大きなサイズを確保する。この関数は、確保されたメモリへのポインタに加えて、実際に確保されたメモリサイズを取得できる。

戻り値

a.allocate_at_least(n)が妥当である場合、それを呼び出して返す。そうでなければ、{a.allocate(n), n}を返す。

#include <iostream>
#include <memory>

int main() {
  std::allocator<int> alloc;
  using traits = std::allocator_traits<std::allocator<int>>;

  std::allocation_result<int*> r = traits::allocate_at_least(alloc, 3);
  std::cout << "allocation count:" << r.count
            << " bytes:" << sizeof(int) * r.count
            << std::endl;

  alloc.deallocate(r.ptr, r.count);
}

出力例

allocation count:4 bytes:16

バージョン

言語

  • C++23

処理系

関連項目

参照