[C con Clase] problema con sizeof()

Steven Davidson srd4121 en njit.edu
Mar Abr 27 15:13:51 CEST 2010


Hola Susana,

On Tue, Apr 27, 2010 at 12:27 PM, Susana Sacie <susanitis en gmail.com> wrote:

> el caso es que tengo un tipo structurado:
>
> struct parse {
>     char        format_id[4];
>     char        version[4];
>     u_int32_t    length;
>     u_int16_t    num_images;
>
> //tiene una longitud de 14 bytes , sin embargo sizeof me devuelve:
>
> sizeof(struct parse)= 16
>
> //si hago sizeof() de format_id, version,length y num_images me devuelve
> respectivamente 4,4,4,2=14. ¿porque el tipo estructurado no me devuelve el
> valor correcto?
>
> El "problema" que tienes está asociado al tema del alineamiento de los
campos de una estructura. Efectivamente, el tamaño de cada campo de una
estructura no siempre equivale al tamaño de la estructura en sí. Esto es
porque el compilador decide organizar los datos para que ocupen bloques de
bytes que sean múltiplos del mayor tamaño de un campo. En tu caso, se elige
'length' como el tamaño mayor porque ocupará 4 bytes. Por lo tanto, el
compilador creará una estructura de 4*n bytes. En el primer bloque de 4
bytes, caben los 4 caracteres de 'format_id', seguidos de los 4 bytes de
'version' que ocupan otro bloque de 4 bytes. El tercer bloque de 4 bytes es
el mismo 'length'. El úlitmo bloque de 4 bytes contiene el campo
'num_images', pero éste sólo ocupa 2 bytes. Esto significa que hay 2 bytes
sin usar.

Al final, la estructura requiere 4 bloques de 4 bytes y por tanto 16 bytes.

Sugiero consultar el capítulo 11 del curso de C++. En particular, visita
este enlace: http://c.conclase.net/curso/index.php?cap=011b#STR_sizeof


Espero que esto te sirva.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100427/8dba9c8d/attachment.html>


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