名前空間
変種
操作

std::allocator_traits<Alloc>::max_size

From cppreference.com
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
 
ヘッダ <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) を返します。

目次

[編集] Parameters

a - 検出するアロケータ

[編集] Return value

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

[編集] Defect reports

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 2162 C++11 max_size は noexcept である必要はありませんでした。 必要
LWG 2466 C++11 フォールバックとしてバイト単位の理論上の最大割り当てサイズが返されていました。 要素単位のサイズが返されます。

[編集] Example

#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

[編集] See also

(C++20まで)
サポートされている最大アロケーションサイズを返す
(std::allocator<T> の public メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)