[C con Clase] __attribute__ ((packed)) en un struct

Programante programante en gmail.com
Mie Jul 1 01:03:10 CEST 2009


Susana Sacie escribió:
> No entiendo por que en la declaración de un tipo estructurado aparece :
>
> struct variable{
> ....
> }*__attribute__ ((packed))*;
>
> El problema es además,  que en VC++ me da error, indicando que packed
> no está declarado, gracias.

Supon que tienes:
struct variable {
  char uno;
  int dos;
};

Supongamos que en esta arquitectura uno ocupa un byte y dos 4. varaible
debería ocupar 5 bytes, ¿verdad?
Incorrecto. Aunque posible el acceso a los campos de la estructura sería
más lento así que el compilador
la modifica insertando tres bytes fantasmas entre uno y dos para que dos
se encuentre alineada.

En determinados casos queremos que los campos de la estructura ocupen
exactamente lo que decimos (por
ejemplo porque los almacenamos en un fichero). No existe una forma
estándar de hacer eso.

Gcc lo establece colocando al final de la estructura *__attribute__
((packed))*

Con VC++ el código equivalente sería:
#pragma pack(push)
struct variable{
....
};
#pragma pack(pop)




Más información sobre la lista de distribución Cconclase