首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sizeof的有关问题

2013-11-29 
sizeof的问题class test{public:test()virtual ~test()virtual void get_a_c()private:int achar c}

sizeof的问题
class test
{
public:
test();
virtual ~test();
virtual void get_a_c();
private:
        int a;
        char c;
};
class derived_test:public test
{
private:
double d;
};


sizeof(test)和sizeof(derived_test)分别是多少?为什么?
[解决办法]
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
基类:一个pVtr, 一个int 一个 char 然后四字节对齐 4+4+4 =12;
子类 :基类 + double  = 12+8 = 20;
[解决办法]
推荐一下这篇博客,相当不错:http://blog.csdn.net/21aspnet/article/details/6729724
看完之后我可以保证你不会疑惑字节对齐了。
其次,你的类中有虚函数,这要求维护一个虚表,找点资料从头复习一下吧。
[解决办法]

引用:
如果不做特殊要求,类的sizeof必须是最大的那个成员变量的sizeof的整数倍,
对于第一个类,虚表一个指针是4,char是1但由于有int和指针,所以char也占4,4+4+4=12

第二个类,基类 + double  = 12+8 = 20,但20不是8的整数倍,所以取24

不好意思说错了,应该是"类的sizeof必须是所有成员变量的sizeof的整数倍"
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

如果不做特殊要求,类的sizeof必须是最大的那个成员变量的sizeof的整数倍,
对于第一个类,虚表一个指针是4,char是1但由于有int和指针,所以char也占4,4+4+4=12

第二个类,基类 + double  = 12+8 = 20,但20不是8的整数倍,所以取24

按4字节补齐的话,就没必要插入空白的4字节补齐,应该是64位系统的关系,按8字节补齐了。


我已经说过了,类的sizeof必须是成员变量的sizeof的整数倍

你说的是默认原则,如果指定大小的话就不一样了。用#pragma pack(4)指定4字节补齐,输出的就是20。

热点排行