C++Alineación


Introducción

Todos los tipos en C ++ tienen una alineación. Esta es una restricción en la dirección de memoria dentro de la cual se pueden crear objetos de ese tipo. Una dirección de memoria es válida para la creación de un objeto si la división de esa dirección por la alineación del objeto es un número entero.

Las alineaciones de tipo son siempre una potencia de dos (incluido 1).

Observaciones

La norma garantiza lo siguiente:

  • El requisito de alineación de un tipo es un divisor de su tamaño. Por ejemplo, una clase con un tamaño de 16 bytes podría tener una alineación de 1, 2, 4, 8 o 16, pero no 32. (Si los miembros de una clase solo tienen un tamaño de 14 bytes, pero la clase debe tener un requisito de alineación de 8, el compilador insertará 2 bytes de relleno para hacer que el tamaño de la clase sea igual a 16.)
  • Las versiones firmadas y sin firmar de un tipo entero tienen el mismo requisito de alineación.
  • Un puntero para void tiene el mismo requisito de alineación que un puntero para char .
  • Las versiones calificadas para cv y no calificadas para cv de un tipo tienen el mismo requisito de alineación.

Tenga en cuenta que si bien existe alineación en C ++ 03, no fue hasta C ++ 11 que se hizo posible consultar la alineación (usando alignof ) y la alineación de control (utilizando alignas ).

Alineación Ejemplos relacionados