std::allocator_traits<Alloc>::max_size
Определён в заголовке <memory> | ||
|---|---|---|
static size_type max_size( const Alloc& a ) noexcept; |
(начиная с C++11) (constexpr начиная с C++20) |
Если возможно, получает максимальный теоретически возможный размер выделения памяти у аллокатора 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
См. также
|
(до C++20) | возвращает наибольший поддерживаемый размер выделения памяти (открытая функция-член std::allocator<T>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits/max_size