std::assume_aligned
| Definido en el archivo de encabezado <memory>
|
||
template< std::size_t N, class T > [[nodiscard]] 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 con N. La implementación puede usar esta información para generar un código más eficiente, pero solo puede hacer esta suposición si se accede al objeto a través del valor de retorno de assume_aligned.
El programa está mal formado si N no es una potencia de 2. El comportamiento no está definido si ptr no apunta a un objeto de tipo T (ignorando la calificación-cv en todos los niveles), o si la alineación del objeto no es al menos N.
Valor de retorno
ptr.
Excepciones
No lanza nada.
Notas
Para asegurarse de 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 asegurarse de beneficiarse de la alineación supuesta.
// Sin embargo, el programa tiene un comportamiento indefinido si p no está alineada
// independientemente de si se usa p1.
}
Depende del programa asegurarse de que la alineación supuesta realmente se mantenga. Una llamada a assume_aligned no hace que el compilador verifique o imponga esto.
Véase también
operador alignof(C++11)
|
Consulta los requerimientos de alineación de un tipo (desde C++11) |
especificador alignas(C++11)
|
Especifica que el almacenamiento para la variable debe estar alineado por la cantidad específica |
(C++11) |
Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado (plantilla de clase) |
(C++11) |
Alinea un puntero en un búfer. (función) |