• Domingo 22 de Diciembre de 2024, 17:09

Autor Tema:  Sizeof Me Miente?  (Leído 1131 veces)

Warchief

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Sizeof Me Miente?
« en: Lunes 23 de Agosto de 2004, 19:19 »
0
Saludos,
no debo de estar en mi sano juicio, pero estoy convencido de que la salida del programa deberia ser "14 14", y sin embargo es "14 16". ¿Alguien me explica donde esta el truco, por favor? Llevo muchisimo tiempo para encontrar que lo que me falla es el sizeof, pero no se por que falla, ¿donde pierdo 2 bytes?

Código: Text
  1.  
  2. typedef short int WORD;
  3. typedef long  int DWORD;
  4.  
  5. // Cabecera archivo BMP
  6. typedef struct {
  7. WORD  bfType;  // Debe ser "BM"
  8. DWORD bfSize;  // Tam fichero en bytes
  9. WORD  bfReserved1; // Debe ser 0
  10. WORD  bfReserved2; // Debe ser 0
  11. DWORD bfOffBits;      // Offset inicio de datos (def 1078)
  12. } bmpFileHeader;
  13.  
  14. int main (void);
  15.  
  16. int main(void) {
  17. bmpFileHeader cabFile;
  18. printf("%d\n",  sizeof(cabFile.bfType)+
  19.     sizeof(cabFile.bfSize)+
  20.     sizeof(cabFile.bfReserved1)+
  21.     sizeof(cabFile.bfReserved2)+
  22.     sizeof(cabFile.bfOffBits));
  23. printf("%d\n", sizeof(bmpFileHeader));
  24. return 0;
  25. }
  26.  
  27.  

Gracias por las respuestas.

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Sizeof Me Miente?
« Respuesta #1 en: Lunes 23 de Agosto de 2004, 19:29 »
0
Hola!!!!!!!!!!!!

La respuesta es que depende de como el compilador alinea todo en memoria. Esa es la diferencia. Fijate que si tenes un struct con un char y un int "supuestamente" (digo supuestamente porque depende de la plataforma en la cual estes trabajando) el int ocupa 4 bytes y el char ocupa 1 byte, pero el sizeof del struct seguramente te dara 8 bytes. Bueno, es debido a como se alinea en memoria.

Salu2!!!!

Warchief

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Sizeof Me Miente?
« Respuesta #2 en: Lunes 23 de Agosto de 2004, 19:33 »
0
Gracias niko, esta solucionado.

Efectivamente como son 32bits(4b) tiene que coger 16bytes , no puede coger 14.

Estoy ANSIC y curro en Win y linux indistintamente.

Que ofuscado estaba XD