std:: assume_aligned
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<memory>
|
||
|
template
<
std::
size_t
N,
class
T
>
constexpr T * assume_aligned ( T * ptr ) ; |
(seit C++20) | |
Teilt der Implementierung mit, 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 auf 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 vom Typ
T
zeigt (unter Ignorierung von cv-Qualifizierern auf jeder Ebene), oder wenn die Ausrichtung des Objekts nicht mindestens
N
beträgt.
Inhaltsverzeichnis |
Rückgabewert
ptr .
Exceptions
Wirft nichts.
Hinweise
Um sicherzustellen, dass das Programm von den durch
assume_aligned
aktivierten Optimierungen profitiert, ist es wichtig, auf das Objekt über seinen Rückgabewert zuzugreifen:
void f(int* p) { int* p1 = std::assume_aligned<256>(p); // Verwenden Sie p1, nicht p, um von der Ausrichtungsannahme zu profitieren. // Das Programm hat jedoch undefiniertes Verhalten, wenn p nicht ausgerichtet ist, // unabhängig davon, ob p1 verwendet wird. }
Es liegt in der Verantwortung des Programms sicherzustellen, dass die Ausrichtungsannahme tatsächlich zutrifft. Ein Aufruf von
assume_aligned
veranlasst den Compiler nicht, dies zu überprüfen oder durchzusetzen.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_assume_aligned
|
201811L
|
(C++20) |
std::assume_aligned
|
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
alignof
(C++11)
|
fragt die Ausrichtungsanforderungen eines Typs ab
(Operator) |
alignas
(C++11)
|
spezifiziert, dass der Speicher für die Variable um einen bestimmten Betrag ausgerichtet werden soll
(Spezifizierer) |
|
(since C++11)
(deprecated in C++23)
|
definiert den Typ, der als nicht initialisierter Speicher für Typen gegebener Größe geeignet ist
(Klassentemplate) |
|
(C++11)
|
richtet einen Zeiger in einem Puffer aus
(Funktion) |
[[
assume
(
expression
)]]
(C++23)
|
spezifiziert, dass der
Ausdruck
an einem gegebenen Punkt immer zu
true
ausgewertet wird
(Attribut-Spezifizierer) |