C关于基础门类占内存大小的疑惑

C关于基础类型占内存大小的疑惑typedef struct tagFileHeader{unsigned short tpunsigned long szunsign

C关于基础类型占内存大小的疑惑
typedef struct tagFileHeader
{
   unsigned short tp;
   unsigned long sz;
   unsigned short rs1;
   unsigned short rs2;
   unsigned long off;
}FileHeader;
测试过, 本机 
sizeof(unsigned short) = 2;
sizeof(unsigned long) = 4;

为什么:sizeof(FileHeader) = 16????好迷惑

win8_64环境 vs2013下测试。想请教,是否是由于64位造成的?但是按道理不应该啊,请高手指导一下
[解决办法]
100%字节对齐的问题