最終更新日時: 2025年09月07日 14時40分09秒 (JST)
Raclamusi が更新

履歴 編集

function template
<memory>

# std::allocator_traits::allocate_at_least(C++23)

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

## 概要

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

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

## 戻り値

式`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

### 処理系

- Clang: 19 ❌
- GCC: 14 ❌
- Visual C++: 2022 Update 10 ❌

## 関連項目

- `std::allocation_result`
- `std::allocator::allocate_at_least()`

## 参照

- P0401R6 Providing size feedback in the Allocator interface
- P2422R1 Remove `nodiscard` annotations from the standard library specification
  - C++26で`[[nodiscard]]`指定が削除された