std::assume_aligned
| Definiert in Header <memory> |
||
| template< std::size_t N, class T > constexpr T* assume_aligned( T* ptr ); |
(seit C++20) | |
Informiert die Implementierung, dass das Objekt, auf das ptr zeigt, mindestens auf N ausgerichtet ist. Die Implementierung kann diese Information verwenden, um effizienteren Code zu generieren, darf diese Annahme jedoch nur treffen, wenn das Objekt über den Rückgabewert von assume_aligned zugegriffen wird.
N muss eine Zweierpotenz sein. Das Verhalten ist undefiniert, wenn ptr nicht auf ein Objekt des Typs T zeigt (ignoriert cv-Qualifikation auf jeder Ebene) oder wenn die Ausrichtung des Objekts nicht mindestens N beträgt.
Inhalt |
[bearbeiten] Rückgabewert
ptr.
[bearbeiten] Ausnahmen
Wirft nichts.
[bearbeiten] Hinweise
Um sicherzustellen, dass das Programm von den durch assume_aligned aktivierten Optimierungen profitiert, ist es wichtig, auf das Objekt über dessen Rückgabewert zuzugreifen.
void f(int* p) { int* p1 = std::assume_aligned<256>(p); // Use p1, not p, to ensure benefit from the alignment assumption. // However, the program has undefined behavior if p is not aligned // regardless of whether p1 is used. }
Es obliegt dem Programm sicherzustellen, dass die Ausrichtungsannahme tatsächlich zutrifft. Ein Aufruf von assume_aligned bewirkt nicht, dass der Compiler dies überprüft oder erzwingt.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_assume_aligned |
201811L |
(C++20) | std::assume_aligned
|
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
alignof (C++11) |
fragt nach Ausrichtungsanforderungen eines Typs (Operator) |
alignas (C++11) |
gibt an, dass der Speicher für die Variable um einen bestimmten Betrag ausgerichtet werden soll (Spezifizierer) |
| (seit C++11)(veraltet in C++23) |
definiert den Typ, der als uninitialisierter Speicher für Typen gegebener Größe geeignet ist (Klassenvorlage) |
| (C++11) |
richtet einen Zeiger in einem Puffer aus (Funktion) |
[[assume(ausdruck)]](C++23) |
spezifiziert, dass der ausdruck an einer gegebenen Stelle immer zu true ausgewertet wird (Attribut-Spezifizierer) |