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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12  (Leído 1,510 veces)
Tito_2017

Desconectado Desconectado

Mensajes: 2


Ver Perfil
lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12
« en: 30 Agosto 2017, 00:16 am »

struct a                                                         struct b

{ int xi;                                                        { int xi;

  char n;                                                         int y;

   int y;                                                           char n;

   char m;    }                                                 char m; }

    

Sizeof (a) = 16 bytes                               Sizeof (b) = 12 bytes
Alguien puede explicarme por que si son iguales uno es de 16 y el otro de 12?


· Los titulos deben ser descriptivos a la temática (no es descriptivo colocar "programación c++" en un subforo de programación en c++)
>aquí las reglas del foro
-Engel Lex


« Última modificación: 30 Agosto 2017, 00:18 am por engel lex » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12
« Respuesta #1 en: 30 Agosto 2017, 00:29 am »

Es por cuestion de Alineacion de los datos.

Int (4 bytes)
char (1 byte)

Pero la computadora tiene preferencia de siempre terminar alinear a cada 4 bytes (Esto cambia mucho) dependiendo del sistema y compilador que uses. Ejemplo.

Código
  1. struct a {
  2. int xi; //4 Bytes toma 4 bytes
  3. char n; //1 Bytes pero lo Alinea a 4 bytes
  4. int y; //4 Bytes toma 4 bytes
  5. char m; //1 Bytes pero lo Alinea a 4 bytes
  6. }
  7.  
Total 16 Bytes Y para el otro ejemplo

Código
  1. struct b {
  2. int xi; //4 Bytes toma 4 bytes
  3. int y; //4 Bytes toma 4 bytes
  4. char n; //1 Bytes
  5. char m; //1 Bytes pero alinea los 2 ultimos a 4 bytes
  6. }
  7.  
Total 12 bytes


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12
« Respuesta #2 en: 30 Agosto 2017, 00:41 am »

Tema de alineamiento de los bytes.
int: 4 bytes
char: 1 byte

Normalmente, salvo que se lo especifiques explícitamente... (poniendo algo como esto en elc aso de GCC):
Código
  1. struct a {} __attribute__ ((packed));

... los campos de la estructura se "alinearán" y agregarán bytes sin uso entre ellos. En tu caso, la alineación por defecto es de 4 bytes. Esto se entiende mejro con un ejemplo, usando tu estructura A:

Código:
|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|
|x|x|x|x|n|_|_|_|y|y|y|y|m|_|_|_|

La idea es que, en memoria, quede todo alineado y no haya direcciones de memoria "extrañas" como "0xF1". Normalmente, múltiplos de 4.

En definitiva, una optimización.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines