Typical alignment of C structures on x86
, Data1 Data2 Data2 Data3:
struct MyData
{
short Data1;
short Data2;
short Data3;
};
"" , , 2 . Data1 0, Data2 2 Data3 4. 6 .
, , , . Microsoft, Borland GNU 32- x86:
- A char ( ) 1 .
- ( ) 2 .
- int ( ) 4 .
- ( ) 4 .
- ( ) 8-, Windows 4-, Linux.
, 8 :
struct MixedData
{
char Data1;
short Data2;
int Data3;
char Data4;
};
, :
struct MixedData /* after compilation */
{
char Data1;
char Padding0[1];
short Data2;
int Data3;
char Data4;
char Padding1[3];
};
12 . , . 3 .
( ) ( "" ) .
, MixedData .
, #pragma . :
#pragma pack(push)
#pragma pack(1)
struct MyPackedData
{
char Data1;
long Data2;
char Data3;
};
#pragma pack(pop)
6 . Microsoft, Borland, GNU .