下面直接来看例子吧:测试环境为32位的系统
以下结构体分别占多少字节:
struct A {
char a;
char b;
char c;
};
sizeof(A) = 3; //因为a、b、c按照1个字节进行对齐
struct B {
int a;
char b;
short c;
};
sizeof(B) = 8;
按照4个字节对齐:
a占4字节
b占一个字节 c占2个字节 有1个字节剩余
struct C {
char b;
int a;
short c;
};
sizeof(C) = 12;
按照4个字节对齐:
b占4个字节
c占2个字节有2个字节空余
#pragma pack(2)
struct D {
char a;
int b;
short c;
};
sizeof(D) = 8;
pragma pack(2)设置了按照2个字节进行对齐
a占用1个字节 1个字节空余
b占用4个字节
c占用2个字节
#pragma pack(1)
struct E {
int a;
char b;
int c;
};
sizeof(E) = 9;
pragma pack(1)设置了按照1个字节进行对齐
a占用1个字节
b占用4个字节
c占用2个字节