相干结构体大小的疑问

有关结构体大小的疑问
首先请看如下代码:


struct chs {
unsigned char cylinder;
unsigned char head;
unsigned char sector;
};

struct mbr {
unsigned char code[440];
unsigned long disk_signature;
unsigned short unused;
struct mbr_partition {
unsigned char status;
struct chs first_sector;
unsigned char partition_type;
struct chs last_sector;
unsigned long first_sector_lba;
unsigned long sectors;
} partition[4];
unsigned short mbr_signature;
};

int _tmain(int argc, _TCHAR* argv[])
{
struct mbr * mbr;
printf("mbr, sizeof mbr is %d.\n", (int)sizeof(struct mbr));
printf("mbr, sizeof mbr_code is %d.\n", (int)sizeof(mbr->code));
printf("mbr, sizeof disk_signature is %d.\n", (int)sizeof(mbr->disk_signature));
printf("mbr, sizeof unused is %d.\n", (int)sizeof(mbr->unused));
printf("mbr, sizeof mbr_partition is %d.\n", (int)sizeof(mbr->partition));
printf("mbr, sizeof mbr_signature is %d.\n", (int)sizeof(mbr->mbr_signature));
return 0;
}


以上代码执行结果如下:

mbr, sizeof mbr is 516.
mbr, sizeof mbr_code is 440.
mbr, sizeof disk_signature is 4.
mbr, sizeof unused is 2.
mbr, sizeof mbr_partition is 64.
mbr, sizeof mbr_signature is 2.


在我看来,440+4+2+64+2=512,结构体mbr的大小应该为512才对。我的问题是为什么执行结果显示结构体mbr的大小为516?

期待回复,谢谢!
------解决方案--------------------
struct mbr_partition 是4字节对齐的,所以在unused之后会有2个字节padding. 整个mbr 结构也是4字节对齐的,因此mbr_signature后面也会有2个字节padding. 
所以总计有4个字节padding, 整个结构的sizeof会比每个字段之后多4.