Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 30 de Julio de 2005, 10:03:06 AM

Título: Sizeof(struct) Retorna Un Valor Ilógico.
Publicado por: J_F_NASH en 30 de Julio de 2005, 10:03:06 AM
 
#include <stdio.h>
#include <stdlib.h>

struct _pepe{
int b;
}pepe;

int main(){
printf("%i\n", sizeof(pepe));
}


El resultado es : 4


#include <stdio.h>
#include <stdlib.h>

struct _pepe{
int b;
[B]char c;[/B]
}pepe;

int main(){
printf("%i\n", sizeof(pepe));
}


El resultado es : 8
Pero 4 +1 ¿no son 5?

¿Qué está ocurriendo aquí?

S2.
Título: Sizeof(struct) Retorna Un Valor Ilógico.
Publicado por: ethernet en 30 de Julio de 2005, 10:21:02 AM
 Busca información sobre el factor de empaquetamiento de las estructuras. Ahí está la clave.
Título: Sizeof(struct) Retorna Un Valor Ilógico.
Publicado por: fiero en 30 de Julio de 2005, 10:40:31 AM
 En Visual C++ 6, por ejemplo está en Project->Settings->C/C++->Code Generation->Struct member alignment.

Estas cosas las hace el compilador porque es más rápido acceder a la memoria en posiciones multiplo de 32 bits, y porque así también puede utilizar siempre accesos de 32 bits incluso para acceder al último dato de la estructura.

un saludo
Título: Sizeof(struct) Retorna Un Valor Ilógico.
Publicado por: zupervaca en 30 de Julio de 2005, 10:41:09 AM
 
#include <stdio.h>
#include <stdlib.h>

#pragma pack(1)
struct _pepe{
int b;
[B]char c;[/B]
}pepe;
#pragma pack(4)

int main(){
printf("%i\n", sizeof(pepe));
}


asi tiene que darte el valor correcto