Namensräume
Varianten
Aktionen

std::allocator_traits<Alloc>::max_size

Von cppreference.com
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
Definiert in Header <memory>
static size_type max_size( const Alloc& a ) noexcept;
(seit C++11)
(constexpr seit C++20)

Falls möglich, wird die maximal theoretisch mögliche Allozierunggröße vom Allozator a durch Aufruf von a.max_size() ermittelt.

Wenn das Obige nicht möglich ist (z.B. wenn Alloc die Memberfunktion max_size() nicht besitzt), wird std::numeric_limits<size_type>::max() / sizeof(value_type) zurückgegeben.

Inhalt

[edit] Parameter

a - Allozator, der ermittelt werden soll

[edit] Rückgabewert

Theoretisch maximale Allozierunggröße.

[edit] Defect reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2162 C++11 max_size musste nicht noexcept sein Gefordert
LWG 2466 C++11 Theoretische maximale Allozierunggröße in Bytes wurde als Fallback zurückgegeben Größe in Elementen wird zurückgegeben

[edit] Beispiel

#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';
}

Mögliche Ausgabe

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

[edit] Siehe auch

(bis C++20)
gibt die maximal unterstützte Allokationsgröße zurück
(public member function of std::allocator<T>) [edit]