5.12 Alineando Campos dentro de Estructuras

 

 

Para el mejor rendimiento de E/S de memoria, los miembros de una estructura deben alinearse a direcciones que coincidan con sus tipos de datos. De no ser así, la CPU requerirá más tiempo para acceder a los miembros. Por ejemplo, un miembro tipo doble palabra debe alinearse en un límite de doble palabra La tabla 5.12.1 presenta las alineaciones que usan los compiladores de C y C++ de Microsoft, y las funciones de la API Win32. En lenguaje ensamblador, la directiva ALIGN establece la alineación de la dirección del siguiente campo o variable:

ALIGN tipo de datos

El siguiente ejemplo, alinea miVar a un límite de doble palabra:

.data

ALIGN DWORD

miVar DWORD ?

Vamos a definir de manera correcta la estructura Empleado, usando ALIGN para colocar a Años en un límite WORD y a Historial Salario en un límite DWORD. Los tamaños de los campos aparecen como comentarios.

Empleado STRUCT

numID BYTE "000000000" ; 9

Apellido BYTE 30 DUP(0) ; 30

ALIGN WORD ; se agregó 1 byte

Anios WORD 0 ; 2

ALIGN DWORD ; se agregaron 2 bytes

HistorialSalario DWORD 0,0,0,0 ; 16

Empleado ENDS ; 60 en total

 

tabla 5.12.1

 

Tipo de miembro

Alineación

BYTE, SBYTE

Se alinea en un límite de 8 bits (byte)

WORD, SWORD

Se alinea en un límite de 16 bits (palabra)

DWORD, SDWORD

Se alinea en un límite de 32 bits (doble palabra)

QWORD

 

Se alinea en un límite de 64 bits (palabra cuádruple)

REAL4

Se alinea en un límite de 32 bits (doble palabra)

REAL8

Se alinea en un límite de 64 bits (palabra cuádruple)

Estructura

El requerimiento de alineación más grande de cualquier miembro

Unión

El requerimiento de alineación del primer miembro

 

Inicio