Tecnología

Inicio

Cómo quitar el relleno de una estructura C

La memoria de computadora es generalmente alineado con un límite igual en tamaño al tamaño de la palabra de sistema. En un hipotético sistema de 32 bits, imagina que este tamaño de palabra es de cuatro bytes de longitud. En el lenguaje C, se pueden crear estructuras que almacenan los datos. Con el fin de alinearlos con el tamaño de la palabra, el compilador de C puede agregar relleno a la estructura. Puede eliminar este relleno mediante el uso de una directiva de preprocesador que le indica que debe alinear los datos de manera diferente.

Instrucciones

1 Cargar el IDE C haciendo clic en el icono del programa. Cuando se abre, seleccione "Archivo / Nuevo / Proyecto" y elegir la opción "Proyecto C" para crear un nuevo proyecto C. Un archivo de código fuente en blanco en la parte editor de texto de la IDE.

2 Crear una "estructura", llamada "A" con la alineación predeterminada de la memoria. Escribe la siguiente declaración en la parte superior del archivo de código fuente:

struct {} A;

3 Añadir algunos miembros de datos a la estructura "A" Mediante la mezcla de caracteres enteros y tipos, que se aseguran de que el compilador rellena la estructura. En un sistema de 32 bits, los dos primeros tipos de datos int cada ocupan cuatro bytes de memoria y están perfectamente alineados como es. Sin embargo, los dos tipos de datos char ocupan cada uno un solo byte, y juntos ocupan dos bytes de datos. El PAD compilador esto con dos bytes de datos no deseados para alinear correctamente los datos. Agregue las siguientes instrucciones a struct "A", colocándolos entre las llaves después de la palabra "estructura".

int a;

int b;

char a;

Char B;

4 Crear una directiva de preprocesador que le indica que debe alinear con el límite de 1 byte, no el límite de 4 bytes:

paquete pragma (empuje, 1)

5 Crear otra estructura, éste llamado "B", y colocarlo inmediatamente después de la directiva de preprocesador escrito en el paso anterior.

struct {} B;

6 Llenar estructura "B" con los mismos tipos de datos como estructura "A", al escribir las siguientes declaraciones dentro de los corchetes de la estructura "B" Estos tipos de datos se alinearán con el byte más cercano, que pasa a ser 10 (cuatro para cada int, uno para cada char). No habrá ningún relleno en esta estructura.

int a;

int b;

char a;

Char B;

7 Restablecer la alineación de nuevo a su forma predeterminada escribiendo la siguiente declaración:

paquete pragma (pop)

Consejos y advertencias

  • El comportamiento real de la estructura de alineación de datos es muy específica de hardware y aplicación C. El ejemplo de este artículo hizo la suposición de que los datos alineados en el límite de cuatro bytes y que el preprocesador de C. Esta conversión puede alterarse por medio de directivas. Esto ciertamente no es el caso en todas las máquinas con un compilador C. Antes de ajustar la alineación de estructura de datos, usted debe entender cómo funciona el hardware subyacente y lo que su implementación específica del compilador de C permite.