PARTE 2: Que pasa con el sizeof() ???

Miguel Cárdenas mcmail_y2k en yahoo.com
Dom Ene 21 09:44:51 CST 2001


>    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...

Holas!!!

Bueno aqui estoy de nuevo... despues de pasar toda la noche meditando al
respecto y probando con diferentes tipos de datos y checando el contenido de
diversas estructuras byte por byte en memoria, vi que el problema no es el
sizeof sino que realmente ese "amount of memory" es generado!!!

Lo que encontre es que el tamaño del bloque de memoria utilizado es multiplo
del tamaño de tipo de dato mas grande, por ejemplo, con unsigned long o con
float el tamaño del bloque allocated es multiplo de 4, con unsigned short es
multiplo de 2, con long long es multiplo de 8 y asi... Por lo cual el tamaño de
las estructuras nunca es el que deberia de ser como deberia esperarse...

En si mi problema no es que el bloque sea mas grande por 1, 2 o 3 bytes pues
solo copio los bytes efectivos y los demas lo ignoro, el problema es que al usar
el sizeof para copiar y armar paquetes de acuerdo al protocolo de icq (cuyos
datos y offsets no pueden ser alterados) pues todos los offsets son un
desmadre y resulta en paquetes que no sirven para nada...

Alguna sugerencia para armar mi propio SIZEOF() que me de el tamaño de los
datos y no el tamaño de memoria allocated? Please!!! se los agradecere
eternamente!!!

Saludos!

-- 

						 Miguel Cárdenas
						--------------------
						mcmail_y2k en yahoo.com


---------------------------------------------------------
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