成员的大小的和不等于类的大小,主要是因为类内部有padding。额外的padding保证声明数组时,各个元素的对齐要求依然满足,而且还会满足cpu对于不同类型的对齐要求。x86一般可以存取没有对齐的数据,但是效率较低,有些cpu不能存取没有对齐的数据,会产生异常。
假定32bit系统,那么常见数据类型的对齐要求是
- char 1字节
- short 2字节
- int 4字节
- long 4字节
- float 4字节
- double 8字节(不一定,linux上似乎只要求4字节)。
之后看你的代码,各个成员的偏移为
- index - 0
- name - 4
- age - 30
- salary - 32
这里总的大小为40,理由是age不是从29开始,而是30,为了保证满足short的对齐要求。