为什么这里显示的是12而不是9?
按理来说int字节是4 float是4 char是1
那总字节应该是9啊,为什么会是12
这是由于内存对齐(memory alignment)所导致的。内存对齐是计算机体系结构中的一个概念,它指的是将变量存储在内存中时,按照特定的规则来分配内存空间。这样可以提高内存读写的效率,同时也保证了程序的可移植性和兼容性。
在这个例子中,当结构体中的变量按照其定义顺序依次排列时,编译器会在变量之间插入一些填充字节,使得变量的地址符合特定的对齐规则(比如说,32位架构通常要求变量在内存中的地址是4的倍数)。因此,实际占用的内存空间是变量大小的整数倍。
在这个结构体中,int占用了4个字节,float占用了4个字节,char占用了1个字节。由于int和float的大小都是4字节,它们可以在同一个对齐单元中排列,因此它们之间不需要填充字节。但是,由于char的大小是1字节,它需要在单独的对齐单元中排列。因此,编译器在结构体中添加了3个填充字节,使得char的地址符合对齐规则。因此,结构体s的大小为12个字节。
如果你希望尽量减小内存占用,可以使用 #pragma pack 指令来控制内存对齐的规则。比如,可以使用 #pragma pack(1) 来关闭内存对齐,这样就可以使结构体的大小为9个字节。但是需要注意的是,关闭内存对齐可能会降低程序的运行效率,因为这样会增加内存读写的次数。