Título: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12 Publicado por: Tito_2017 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 (http://foro.elhacker.net/reglas.htm) -Engel Lex Título: Re: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12 Publicado por: AlbertoBSD 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 Total 16 Bytes Y para el otro ejemplo Código Total 12 bytes Título: Re: lguien puede explicarme por que si son iguales uno es de 16 y el otro de 12 Publicado por: ivancea96 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
... 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| 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. |