Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.6.1  Alineación interna

§1  Sinopsis

Los ajustes de alineación interna descritos en el apartado anterior ( 4.6), no solo ocurren en los campos de bits; también en otras estructuras de datos. Por ejemplo, en el capítulo correspondiente a Iniciación de estructuras ( 4.5.2) se presentó un caso concreto en el que, debido al proceso de alineación interna realizado por el compilador, el tamaño real de una estructura no coincide con el teórico.

Como se indica a continuación, el compilador Borland C++ ofrece varias opciones relativas a la forma en que se alinean internamente los datos en memoria, de forma que el programador puede tener un cierto control sobre esta cuestión, pero la posibilidad no es exclusiva de Borland, por ejemplo, el MS Visual C++ también dispone de una opción equivalente.

§2  Alineación interna en Borland C++

El compilador Borland C++ permite establecer como se alinean internamente los datos en memoria mediante un comando en la lista de opciones con que se puede invocar el compilador. Todos tiene la forma general -an, donde n es un entero con las siguientes posibilidades: 1 = byte;  2 = palabra (2 bytes); 4 = Doble palabra (4bytes); 8 = Cuádruple palabra (8 bytes); 16 = Párrafo (16 bytes). Por defecto, en ausencia de otra indicación, se supone -a4, es decir, una alineación de doble palabra (múltiplos de 32 bits).

Las modalidades de alineación palabra (word), doble palabra (double word) y cuádruple palabra (quad word) fuerzan a los elementos del tamaño de un entero y mayores ( 2.2.4), a un ajuste en direcciones de memoria que son múltiplos del tipo elegido. En las estructuras se insertan bits extra para garantizar que los miembros se alinean adecuadamente.

§3  Alineación de Byte

Comando: -a1 o -a-. En este tipo de alineación el compilador no realiza ningún ajuste en el almacenamiento de variables o campos de datos.  Los datos se alinean en direcciones pares o impares, dependiendo de la siguiente disponible.

Evidentemente este tipo de alineación conduce a programas más compactos en memoria, pero tienden a ser más lentos que los compilados con otras alineaciones, ya que las restantes opciones incrementan la velocidad con que los procesadores Intel 80x86 cargan y restituyen los datos desde/hacia la memoria.

§4  Alineación de palabra  2-bytes

Comando:  -a2. Con este tipo el compilador alinea los datos iguales o mayores que un entero (que no son short ni char) en direcciones pares. Las variables globales y automáticas son alineadas adecuadamente. Los tipos char (y unsigned char) pueden ser situados en cualquier dirección; todos los demás son alojados en direcciones pares.

§5  Alineación de doble palabra  4-bytes

Comando:  -a4 o -a. Con este tipo los datos distintos de carácter se alinean en palabras de 4 bytes (32 bits). Los datos con tipos menores que 4 bytes son alineados en el tamaño correspondiente a su tipo.

§6  Alineación de cuádruple palabra  8-bytes

Comando: -a8.  Con este tipo los datos distintos de carácter se alinean en palabras de 8 bytes (64 bits). Los datos con tipos menores que 8 bytes son alineados en el tamaño correspondiente a su tipo.

§7  Alineación de párrafo  16-bytes

Comando: -a16.  Con la alineación de párrafo tipo los datos distintos de carácter se alinean en palabras de 16 bytes (128 bits). Los datos con tipos menores que 16 bytes son alineados en el tamaño correspondiente a su tipo.