字节对齐

来源:互联网 发布:魔豆精灵网络加速器 编辑:程序博客网 时间:2024/06/03 15:49

若char是1字节,int是4字节,指针类型是4字节,代码如下:

class CTest{    public:        CTest():m_chData(‘\0’),m_nData(0)        {        }        virtual void mem_fun(){}    private:        char m_chData;        int m_nData;        static char s_chData;};char CTest::s_chData=’\0’;

问:
(1)若按4字节对齐sizeof(CTest)的值是多少?
(2)若按1字节对齐sizeof(CTest)的值是多少?

解题思路:

1、先找有没有virtual函数,有的话就要建立虚函数表+4
2、static的成员变量属于类域,不算入对象中+0
3、神马成员都没有的类,或者只有成员函数+1
一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节)


答案:

(1)结果是12= 4(虚表指针)+1(char )+3(对齐补位)+4(int)

(2)结果是9 =4(虚表指针)+1(char )+4(int

0 0