Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Otros tipos como matrices, structs y uniones tienen requisitos de alineación más estrictos que garantizan la coherencia en el almacenamiento de agregados y uniones y la recuperación de datos.Estas son las definiciones de matriz, struct y unión:
Matriz
Contiene un grupo ordenado de objetos de datos adyacentes.Cada objeto se denomina elemento.Todos los elementos de una matriz tienen el mismo tamaño y tipo de datos.Estructura
Contiene un grupo ordenado de objetos de datos.A diferencia de los elementos de una matriz, los objetos de datos de un struct pueden tener tipos de datos y tamaños diferentes.Cada objeto de datos en un struct se denomina miembro.Unión
Un objeto que contiene cualquier miembro de un conjunto de miembros con nombre.Los miembros del conjunto con nombre pueden ser de cualquier tipo.El espacio de almacenamiento asignado a una unión es igual al espacio requerido por el miembro de mayor tamaño de la unión, más algo de relleno necesario para alineaciones.
La tabla siguiente muestra la alineación sugerida encarecidamente para los miembros escalares de uniones y structs.
Tipo escalar |
Tipo de datos en C |
Alineación necesaria |
Int8 |
char |
Byte |
UInt8 |
unsigned char |
Byte |
Int16 |
short |
Word |
UInt16 |
unsigned short |
Word |
Int32 |
int, long |
Doubleword |
UInt32 |
int sin signo, long sin signo |
Doubleword |
Int64 |
__int64 |
Quadword |
UInt64 |
unsigned __int64 |
Quadword |
FP32 (precisión sencilla) |
float |
Doubleword |
FP64 (precisión doble) |
double |
Quadword |
POINTER |
* |
Quadword |
__m64 |
struct __m64 |
Quadword |
__m128 |
struct __m128 |
Octaword |
Se aplican las siguientes reglas de alineación de agregados:
La alineación de una matriz es igual que la alineación de uno de los elementos de la matriz.
La alineación del principio de un struct o una unión es la alineación máxima de cualquier miembro individual.Cada miembro de la estructura o la unión se debe colocar en su alineación apropiada, según se define en la tabla anterior, lo que puede requerir relleno interno implícito, dependiendo del miembro anterior.
El tamaño de la estructura debe ser un múltiplo entero de su alineación, que puede requerir relleno después del último miembro.Puesto que estructuras y uniones se pueden agrupar en matrices, cada elemento de matriz de un struct o una unión debe empezar y finalizar en la alineación apropiada, determinada previamente.
Es posible alinear datos de tal modo que sean mayores que los requisitos de alineación, siempre que se respeten las reglas mencionadas.
Un compilador individual puede ajustar el empaquetado de un struct por razones de tamaño.Por ejemplo, /Zp (Alineación de miembros de estructura) permite ajustar el empaquetado de estructuras.