+ -
当前位置:首页 → 问答吧 → C/C++中数据对齐的缺陷

C/C++中数据对齐的缺陷

时间:2010-08-23

来源:互联网

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/

作者: pan_0326   发布时间: 2010-08-23

“因为sizeof反映的是数组中个体的大小,所以要求必须是对齐
的倍数”这句话说的最好
sizeof(CA)=(sizeof1(CA)+align(CA)-1)/align(CA)*align(CA)这个公式怎么得到的??

作者: pengjianbokobe   发布时间: 2010-08-23

字节对齐应该是为了提高存取效率吧

作者: proghua   发布时间: 2010-08-23