#include <stdio.h>
int main(void)
{
union
{
char c;
short s:8;
}u;
struct
{
char c;
short s:8;
}s;
struct
{
short s:9;
int j:9;
char c;
short t:9;
short u:9;
char d;
}ss;
printf("sizeof(s) = %d; sizeof(u) = %d; sizeof(ss) = %d\n\n",
sizeof(s), sizeof(u), sizeof(ss));
struct
{
int a:2; //int 类型4Byete alignment
}s_int;
struct
{
char a:2; //char 类型1Byte alignment
}s_char;
struct
{
short a:2; //short 类型2 Byte alignment
}s_short;
struct
{
char c;
int a:2;
}s_int1;
struct
{
char c;
short a:2;
}s_short1;
struct
{
char c;
char a:2;
}s_char1;
struct
{
int i; //int 类型4Byete alignment
int a:2;
}s_int2;
struct
{
int i;
short a:2;
}s_short2;
struct
{
int i;
char a:2;
}s_char2;
printf("%d %d %d\n\n", sizeof(s_int), sizeof(s_char), sizeof(s_short));
printf("%d %d %d\n\n", sizeof(s_int1), sizeof(s_char1), sizeof(s_short1));
printf("%d %d %d\n\n", sizeof(s_int2), sizeof(s_char2), sizeof(s_short2));
}
int main(void)
{
union
{
char c;
short s:8;
}u;
struct
{
char c;
short s:8;
}s;
struct
{
short s:9;
int j:9;
char c;
short t:9;
short u:9;
char d;
}ss;
printf("sizeof(s) = %d; sizeof(u) = %d; sizeof(ss) = %d\n\n",
sizeof(s), sizeof(u), sizeof(ss));
struct
{
int a:2; //int 类型4Byete alignment
}s_int;
struct
{
char a:2; //char 类型1Byte alignment
}s_char;
struct
{
short a:2; //short 类型2 Byte alignment
}s_short;
struct
{
char c;
int a:2;
}s_int1;
struct
{
char c;
short a:2;
}s_short1;
struct
{
char c;
char a:2;
}s_char1;
struct
{
int i; //int 类型4Byete alignment
int a:2;
}s_int2;
struct
{
int i;
short a:2;
}s_short2;
struct
{
int i;
char a:2;
}s_char2;
printf("%d %d %d\n\n", sizeof(s_int), sizeof(s_char), sizeof(s_short));
printf("%d %d %d\n\n", sizeof(s_int1), sizeof(s_char1), sizeof(s_short1));
printf("%d %d %d\n\n", sizeof(s_int2), sizeof(s_char2), sizeof(s_short2));
}
输出如下:
$ ./a.exe
sizeof(s) = 2; sizeof(u) = 2; sizeof(ss) = 12
4 1 2
4 2 2
8 8 8