A
Size: a a a
FГ
RS
struct MixedData
{
char Data1;
short Data2;
int Data3;
char Data4;
};
struct MixedData /* After compilation in 32-bit x86 machine */
{
char Data1; /* 1 byte */
char Padding1[1]; /* 1 byte for the following 'short' to be aligned on a 2 byte boundary assuming that the address where structure begins is an even number */
short Data2; /* 2 bytes */
int Data3; /* 4 bytes - largest structure member */
char Data4; /* 1 byte */
char Padding2[3]; /* 3 bytes to make total size of the structure 12 bytes */
};
RS
RS
RS
struct mystrct
data1 db ?
rb 1
data2 dw ?
data3 dd ?
data4 db ?
rb 7
ends
RS
RS
A
RS
RS
struct MixedData /* After compilation in 32-bit x86 machine */```
{
char Data1; /* 1 byte */
char Padding1[1]; /* 1 byte for the following 'short' to be aligned on a 2 byte boundary assuming that the address where structure begins is an even number */
short Data2; /* 2 bytes */
int Data3; /* 4 bytes - largest structure member */
char Data4; /* 1 byte */
char Padding2[3]; /* 3 bytes to make total size of the structure 12 bytes */
};
RS
RS
x32:
char (один байт) будет 1-байтовое выровнены.
short (два байта) будет 2-байтовое выровнены.
int (четыре байта) будет выровнен по 4 байта.
long (четыре байта) будет 4-байтовое выровнены.
float (четыре байта) будет 4-байтовое выровнены.
double (восемь байт) будет 8 байт выровнен по Windows , и 4 байта выровненной на Linux (8 байт с -malign-двойной вариант времени компиляции).
long long (восемь байт) будет 4-байтовое выровнены.
long double (десять байты с C ++ Builder и DMC, восемь байт с Visual C ++, двенадцать байт с GCC) будут 8-байтовыми выровненным с C ++ Builder, 2 байта в соответствии с DMC, 8-байтовые совмещены с Визуальным C ++ и 4 байта с выравниванием по GCC.
pointer (четыре байта) указатель будет выровнен по 4 байта. (например: char *, int *)
x64 Тоже самое кроме:
long (восемь байт) будет 8-байтовое выровнены.
double (восемь байт) будет 8-байтовое выровнены.
long long (восемь байт) будет 8-байтовое выровнены.
long double (восемь байт с Visual C ++, шестнадцать байт с GCC) будут 8 байт в соответствии с Visual C ++ и 16-байт в соответствии с GCC.
pointer (восемь байт) будет выровнен по 8 байт.
RS
RS
RS