Namespaces
Variants

std::allocator_traits<Alloc>:: max_size

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
ヘッダーで定義 <memory>
static size_type max_size ( const Alloc & a ) noexcept ;
(C++11以降)
(C++20以降constexpr)

可能であれば、アロケータ a から理論的に可能な最大割り当てサイズを、 a. max_size ( ) を呼び出すことで取得します。

上記が不可能な場合(例えば、 Alloc がメンバ関数 max_size() を持たない場合)、 std:: numeric_limits < size_type > :: max ( ) / sizeof ( value_type ) を返します。

目次

パラメータ

a - 検出するアロケータ

戻り値

理論上の最大割り当てサイズ。

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用バージョン 公開時の動作 正しい動作
LWG 2162 C++11 max_size はnoexceptであることが要求されていなかった 要求される
LWG 2466 C++11 理論的な最大アロケーションサイズがバイト単位でフォールバックとして返されていた 要素数で返される

#include <iostream>
#include <memory>
#include <locale>
int main()
{
    std::allocator<short> b;
    std::allocator<int> d;
    const auto p = std::allocator_traits<decltype(b)>::max_size(b);
    const auto q = std::allocator_traits<decltype(d)>::max_size(d);
    std::cout.imbue(std::locale("en_US.UTF-8"));
    std::cout << std::uppercase
              << "p = " << std::dec << p << " = 0x" << std::hex << p << '\n'
              << "q = " << std::dec << q << " = 0x" << std::hex << q << '\n';
}

出力例:

p = 9,223,372,036,854,775,807 = 0x7,FFF,FFF,FFF,FFF,FFF
q = 4,611,686,018,427,387,903 = 0x3,FFF,FFF,FFF,FFF,FFF

関連項目

(until C++20)
サポートされる最大の割り当てサイズを返す
( std::allocator<T> のpublicメンバ関数)