对于32位系统,4字节对齐:
typedef struct _test
{
int a;
}test;
sizeof(test) = 4;
typedef struct _test
{
int a;
char b;
}test;
sizeof(test) = 8;
由于是4字节对齐,故结构体大小肯定是4的倍数,当然空结构体另当别论了。
a占四字节,其后的b大小本身只是一个字节,但是四字节对齐,则另外三字节就空着了。(对于空结构体不同编译器不一样,有的是1字节,有的是0字节)
typedef struct _test
{
int a;
char b;
short c;
}test;
sizeof(test) = 8;
由于b后留有三个空字节,当c加入时大小小于3,故c会在那保留的空间,故结构体大小还是8字节,此时,还有一个字节空着的。
typedef struct _test
{
int a;
char b;
short c;
double d;
}test;
sizeof(test) = 16;
由于d的大小为8字节,大于剩余的一个字节,故d需要另开空间,此时空间占用情况这样4+4(1+2另一字节保留)+8=16。
typedef struct _test
{
int a;
char b;
short c;
double d;
float e;
}test;
sizeof(test) = 20;
不用解释了。
typedef struct _test
{
int a;
char b;
short c;
double d;
float e;
void (*f)(void);
}test;
sizeof(test) = 24;
指针占四字节。
阅读(2039) | 评论(0) | 转发(0) |