std::allocator_traits<Alloc>::max_size

来自cppreference.com
 
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集器支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)



 
 
在标头 <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>
 
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> 的公开成员函数)