结构体的大小
1字节是8位,一般32位机子上各个数据类型所占的存储空间如下: char:8位 short:16位 int:32位 long:32位 unsigned long:32位 long long:64位 float:32位 double:64位 long double:64位 指针:32位 64位机器上各个数据类型所占的存储空间如下: char:8位 short:16位 int:32位 long:64位 unsigned long:64位 long long:64位 float:32位 double:64位 long double:128位 指针:64位 结构体的大小 因为结构体有时候需要 字节对齐 。一般而言,struct的sizeof是所有成员字节对齐后长度相加,而 union的sizeof是取最大的成员长度 。 在默认情况下,编译器为每一个变量或数据单元按其自然对界条件分配空间。一般地,可以通过下面的方法来改变默认的对界条件: (1) 使用伪指令#pragma pack(n),C编译器将按照n个字节对齐。 (2) 使用伪指令#pragma pack(),取消自定义字节对齐方式。 字节对齐的细节和编译器实现相关,但一般而言,满足以下3个准则: (1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除。 (2) 结构体每个成员相对于结构体首地址的偏移量(offset