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

C++sizeof计算种的大小三

2012-11-10 
C++sizeof计算类的大小三前面已经有了两篇讲解sizeof计算类和结构体大小的文章,这次涉及的更复杂,有些我也

C++sizeof计算类的大小三

前面已经有了两篇讲解sizeof计算类和结构体大小的文章,这次涉及的更复杂,有些我也不甚明了,但结果是有的,欢迎大家分析。

Derived3大大小是28,四个int成员变量,一个指向虚函数表的指针,C++sizeof计算种的大小三

Derived4的大小是32,四个int成员变量+虚函数表的指针+???C++sizeof计算种的大小三


求大家帮忙分析啊…… 多继承和虚继承搞晕了。


下面是从参考文献中拖下来的规则,供参考:

    1、空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);
    2、一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;
    3、因此一个对象的大小≥所有非静态成员大小的总和; 
    4、当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable;
    5、虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);
    6、在考虑以上内容所占空间的大小时,还要注意编译器下的“补齐”padding的影响,即编译器会插入多余的字节补齐;
    7、类对象的大小=各非静态数据成员(包括父类的非静态数据成员但都不包括所有的成员函数)的总和+ vfptr指针(多继承下可能不止一个)+vbptr指针(多继承下可能不止一个)+编译器额外增加的字节。


参考链接:

http://blog.csdn.net/wangqiulin123456/article/details/8074891

http://blog.csdn.net/hackbuteer1/article/details/7883531  

http://blog.csdn.net/wangqiulin123456/article/details/8059536




热点排行