Namespaces
Variants

std:: assume_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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

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)