std:: assume_aligned
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<memory>
|
||
|
template
<
std::
size_t
N,
class
T
>
constexpr T * assume_aligned ( T * ptr ) ; |
(desde C++20) | |
Informa a la implementación que el objeto al que apunta
ptr
está alineado al menos a
N
. La implementación puede usar esta información para generar código más eficiente, pero solo podría hacer esta suposición si se accede al objeto mediante el valor de retorno de
assume_aligned
.
N
debe ser una potencia de 2. El comportamiento es indefinido si
ptr
no apunta a un objeto de tipo
T
(ignorando la calificación cv en cada nivel), o si la alineación del objeto no es al menos
N
.
Contenidos |
Valor de retorno
ptr .
Excepciones
No lanza nada.
Notas
Para asegurar que el programa se beneficie de las optimizaciones habilitadas por
assume_aligned
, es importante acceder al objeto a través de su valor de retorno:
void f(int* p) { int* p1 = std::assume_aligned<256>(p); // Usar p1, no p, para asegurar el beneficio de la suposición de alineación. // Sin embargo, el programa tiene comportamiento indefinido si p no está alineado // independientemente de si se usa p1 o no. }
Depende del programa garantizar que la suposición de alineación realmente se cumpla. Una llamada a
assume_aligned
no hace que el compilador verifique o imponga esto.
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_assume_aligned
|
201811L
|
(C++20) |
std::assume_aligned
|
Ejemplo
|
Esta sección está incompleta
Motivo: sin ejemplo |
Véase también
alignof
(C++11)
|
consulta los requisitos de alineación de un tipo
(operador) |
alignas
(C++11)
|
especifica que el almacenamiento para la variable debe estar alineado por una cantidad específica
(especificador) |
|
(since C++11)
(deprecated in C++23)
|
define el tipo adecuado para usar como almacenamiento no inicializado para tipos de tamaño dado
(plantilla de clase) |
|
(C++11)
|
alinea un puntero en un búfer
(función) |
[[
assume
(
expresión
)]]
(C++23)
|
especifica que la
expresión
siempre se evaluará como
true
en un punto dado
(especificador de atributo) |