- 论坛徽章:
- 0
|
class CA {
int a;
short b;
};
class CB : public CA {
short c;
};
上面是C++的类定义例子,sizeof(CA)==8,实际只占6字节;sizeof(CB)==12,实际只需
8字节.
typedef struct CA {
int a;
short b;
} CA;
typedef struct CB {
CA CA;
short c;
} CB;
上面是等效的C例子,sizeof(CA)==8,实际只占6字节;sizeof(CB)==12,实际只需8字节.
为什么不能紧缩排列呢?因为sizeof反映的是数组中个体的大小,所以要求必须是对齐
的倍数,CA是4字节对齐,所以sizeof(CA)==8,sizeof(CB)==12.而结构定义中后续字段
不一定要求>=4的对齐.
现在假设在C/C++中增加一个关键字sizeof1,表示非数组中的结构大小,sizeof1(CA)
==6,sizeof(CA)==8,sizeof和sizeof1是有关联的:
sizeof(CA)=(sizeof1(CA)+align(CA)-1)/align(CA)*align(CA)
现在构造CB时,就可以在sizeof1(CA)后增加字段,结果sizeof(CB)==sizeof1(CB)==8.
http://blog.163.com/coo_bin/ |
|