Alineación de datos en memoria

Es importante resaltar que todos los datos serán, en este lenguaje, alineados a 4 bytes (tamaño de los datos de tipo INT. Esto quiere decir que el OFFSET de todos los datos se situará siempre en una dirección de memoria absoluta múltiplo de cuatro.

Esto tiene implicaciones directas en los datos de los tipos WORD y BYTE. Ya que estos ocupan respectivamente 2 bytes y 1 byte. Por ello, si se define una variable de tipo WORD se desaprovecharán 2 bytes de memoria, y se define una variable de tipo BYTE se desaprovecharán 3 bytes (ya que el siguiente dato estará también alineado a 4).

Por ello, para aprovechar mejor la memoria del ordenador, es recomendable utilizar estos dos tipos de datos como tablas (ver la declaración de una tabla), ya que los diferentes elementos de una tabla siempre se guardan consecutivos, y no se alinean en memoria.


Ejemplos de ocupación de memoria:

BYTE b1; - Memoria requerida 1, Memoria ocupada 4.

WORD w1; - Memoria requerida 2, Memoria ocupada 4.

INT i1; - Memoria requerida 4, Memoria ocupada 4.

BYTE b2[7]; - Memoria requerida 8, Memoria ocupada 8.

WORD w2[2]; - Memoria requerida 6, Memoria ocupada 8.

BYTE b3[2]; - Memoria requerida 3, Memoria ocupada 4.

WORD w3[3] - Memoria requerida 8, Memoria ocupada 8.


Como se puede observar, la memoria ocupada (en bytes) por un dato siempre será un valor múltiplo de 4.

Esto se debe tener en cuenta también en los campos de las estructuras de datos ya que, por ejemplo; dos variables de tipo WORD consecutivas ocuparán 8 bytes, mientras que una tabla WORD con dos elementos ocupará sólo 4 bytes.


Ver: Tipos de datos - Declaración de un dato