这里结构体里有三个成员,一个是一个字节的c1,一个是四个字节的i,一个是一个字节的c2,但是这里sizeof算出来的确实十二个字节,这是为什么呢?
1.我们将内存假设是竖着排放的,结构体内的第一个成员
——是放在结构体变量在内存中存储位置0的偏移处开始的
2.从第二个成员往后的所有成员,都放在一个对齐数(成员的大小和默认对齐数的较小值)的整数的整数倍的地址处。
3.结构体的总大小是结构体的所有成员的对齐数中最大对齐数的整数倍。
那么为什么会存在内存对齐呢?
大部分的资料都是如是说的:
1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要做两次内存访问;二对齐的内存访问仅需要一次访问。