[LUGAr-gral] Que pasa con el sizeof() ???

Nahuel Greco ngreco en softhome.net
Dom Ene 21 10:59:27 CST 2001


On Sun, 21 Jan 2001 00:19:56 -0600
Miguel Cárdenas <mcmail_y2k en yahoo.com> wrote:

> Hola todos!!!
> 
>    struct ICQHDRv2_CLIENT {
>       unsigned short  version;
>       unsigned short command;
>       unsigned short seq_num;
>       unsigned long uin;
>    };
> 
> Alguien me podria explicar porque demonios   sizeof(ICQHDRv2_CLIENT )  
me
> devuelve un 12 !!! hasta donde yo se esta porqueria me debe de dar 10...
> 
> de hecho tengo otras estructuras que por cada unsigned long que utilizo
le
> agrega 2 bytes mas al sizeof (osea cada long aumenta 6 en vez de 4),
aunque el
> sizeof del unsigned long me devuelve 4 asi solito...
> 
> QUE PASA!!!

El compilador lo tenes configurado para que te alinee las estructuras, o
sea:

short version -> 2 bytes - empieza en offset 0
short command -> 2 bytes - empieza en offset 2
short seq_num -> 2 bytes - empieza en offset 4
long uin      -> 4 bytes - empieza en offset ** 8 ** no en 6!

el sizeof te da eso poque el compilador mete 2 bytes no usados entre el
seq_num y el uin, para que el uin le quede en el offset 8, multipo de 32bits (4
bytes), esto hace que pueda realizar algunas optimizaciones, no me acuerdo
como deshabilitas esto, (man gcc), pero en lo unico que te jode es que tus
estructuras van a ser
un poco mas grandes en memoria, es una speed versus size optimization.

Estas haciendo un icq client?

---------------------------------
          Nahuel Greco
   http://www.codelarvs.com.ar
  Web Development - Open Source
   Game programming - Research
---------------------------------
---------------------------------------------------------
para salir de la lista, enviar un mensaje con las palabras
"unsubscribe ayuda" en el cuerpo a majordomo en linux.org.mx



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