C/Visual C - saber el porque del tamaño de un struct

   
Vista:

saber el porque del tamaño de un struct

Publicado por Diego (87 intervenciones) el 31/05/2016 23:45:38
BUenas tardes, tengo este pregrama y no se el porqué del tamaño de mi estructura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
typedef struct {
	int a;
	char b;
}Mi_struct;
int main (int argc, char *argv[]){
//	printf("el tamaño de long unigned int es: %lu", sizeof(long unsigned int));	
//	putchar('\n');
	printf("el tamaño de int es: %lu", sizeof(int));
	putchar('\n');
	printf("el tamanio de char es: %lu", sizeof(char));
	putchar('\n');
	printf("Tamaño de mi estructura: %lu", sizeof(Mi_struct));
	putchar('\n');
	return 0;
}

linux x64, arquitectura x64.

arroja estos resultados:

el tamaño de long unigned int es: 8
el tamaño de int es: 4
el tamanio de char es: 1
Tamaño de mi estructura: 8
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

saber el porque del tamaño de un struct

Publicado por Chema (187 intervenciones) el 01/06/2016 00:04:54
Eso es, que el linux ese que usas tiene un virus,

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct {
	int a;
	char b;
	char b1;
	char b2;
	char b3;
}Mi_struct;                 sizeof = 8;
 
typedef struct_1 {
	int a;
	char b;
}Mi_struc_1t;             sizeof = 8;


Es normal que struct tenga el mismo tamaño que struct_1.
No te puedo recomendar información en castellano, no leo páginas en castellano sobre C.
Busca alignment and padding
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

saber el porque del tamaño de un struct

Publicado por agustin (179 intervenciones) el 02/06/2016 01:25:50
Eso ocurre por la alineación y lo hace el compilador. La alineación por defecto en win32 es de 32 bits, o sea 4 bytes y como hay un int y un char ocupará 4+4=8 bytes.
Puedes hacer que la alineación cambie a un byte con pragma pack o por ejemplo en borland añadiendo la opción de compilación -a1 pero no sería portable y daría peor rendimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar