名稱空間
變體
操作

std::allocator_traits<Alloc>::max_size

來自 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.max_size(),從分配器 a 獲取理論上最大可能的分配大小。

如果上述不可行(例如,`Alloc` 沒有成員函式 `max_size()`),則返回 std::numeric_limits<size_type>::max() / sizeof(value_type)

目錄

[編輯] 引數

a - 要檢測的分配器

[編輯] 返回值

理論上的最大分配大小。

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
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

[編輯] 另請參閱

(C++20 前)
返回支援的最大分配大小
(std::allocator<T> 的公共成員函式) [編輯]