elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tamaño de estructura varia con el orden de sus miembros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tamaño de estructura varia con el orden de sus miembros  (Leído 2,203 veces)
SebaC

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Tamaño de estructura varia con el orden de sus miembros
« en: 7 Junio 2016, 22:47 pm »

No entiedo porque el siguiente codigo imprime dos tamaños diferentes si ambos contienen la misma catidad de dato y de igual tipo

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct
  4. {
  5.    char a;
  6.    int b;
  7.    char c;
  8. } A;
  9.  
  10. typedef struct
  11. {
  12.    char a;
  13.    char c;
  14.    int b;
  15. } B;
  16.  
  17. int main()
  18. {
  19.    printf("%d\n", sizeof(A)); //Aqui me imprime 12
  20.    printf("%d\n", sizeof(B)); //Aqui me imprime 8
  21.    return 0;
  22. }

Alguna idea de porque esta salida; el tamaño correcto no seria 6 bytes  :huh:


« Última modificación: 7 Junio 2016, 22:56 pm por Sosar » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Tamaño de estructura varia con el orden de sus miembros
« Respuesta #1 en: 7 Junio 2016, 23:38 pm »

Depende del compilador y banderas de compilacion asi como de la arquitectura.

Te puedo decir que  el sistema por cuestion de alineamiento, en tu caso reservo en bloques de 4 bytes por variable,

Primer caso el de A
4 bytes para el primer char, 4 bytes para el int y otro 4 para el ultimo.

Ahora el cado de B, 4 bytes para los primeros 2 char y 4 bytes mas para el int.

al paracer le es más fácil acceder a un dato int en bloques de memoria divisibles por 4 pero habria que ver como trabaja el compilador internente para hacer eso.


Y si el tamaño optimo es 6 bytes
Saludos


« Última modificación: 7 Junio 2016, 23:46 pm por AlbertoBSD » En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Tamaño de estructura varia con el orden de sus miembros
« Respuesta #2 en: 8 Junio 2016, 00:24 am »

Los compiladores alinean automaticamente los datos, insertando bytes de relleno para asegurar que cada miembro este alineado correctamente para un acceso mas rapido a ellos.

Código
  1. typedef struct
  2. {
  3.    char a;
  4.    char relleno[3]; // para completar 4 bytes
  5.    int b;
  6.    char c;
  7.    char relleno[3]; //para completar 4 bytes
  8. } A;
  9.  
  10. typedef struct
  11. {
  12.    char a;
  13.    char c;
  14.    char relleno[2]; //para completar 4 bytes
  15.    int b;
  16. } B;

Una instancia de una estructura tendra la alineacion de su miembre de mayor número bytes. Puedes evitar la alineación usando la directiva #pragma pack(1) pero no es recomendable porque podría tener un severo impacto en el rendimiento
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Qué es 54e Mb en una red? Varía en algo??
Wireless en Linux
NikNitro! 9 11,440 Último mensaje 2 Mayo 2012, 22:18 pm
por cagoscra
Problema con el tamaño de una estructura y/o cadena en Dev-C++
Programación C/C++
BlerofonT 4 3,500 Último mensaje 8 Abril 2018, 10:52 am
por eduu15
Tamaño bytes para una estructura
Programación C/C++
abreu20011 4 3,083 Último mensaje 11 Agosto 2012, 01:35 am
por BlackZeroX
Offests de los miembros de la estructura DEVMODE
Programación C/C++
Eleкtro 4 2,249 Último mensaje 13 Diciembre 2015, 17:21 pm
por Eleкtro
Optimizar tamaño de estructura de Datos « 1 2 »
Programación C/C++
AlbertoBSD 11 5,241 Último mensaje 23 Julio 2016, 16:18 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines