读书人

C++虚承继之类的实际大小

发布时间: 2012-10-13 11:38:17 作者: rapoo

C++虚继承之类的实际大小

这几天翻箱底将去年买的《深度探索C++对象模型》这本NB的书拿出来看看,The Semantics of Data这一章中发现了一个过去一直没有想到的一个问题,问题如下

输出下面class的大小:

这是可能大家就会觉得他们的大小都应该是0,因为他们中没有任何一个有明显的数据,只表示了继承关系。但是至少也认为class x应该是0吧,他什么都没有。结果却让你想不到,我在vs2010环境下测试的大小是:(不同编译器可能这个大小是不一样)

很奇怪吧,为什么是这个结果呢。一个空的class事实上并不是空,它有一个隐藏的1 byte,这个是编译器安插进去的char,这样就可以保证定义的对象在内存中的大小是独一无二的,这个地方你可以自己测试下,比如:


现在你觉得class A的大小应该是多少呢?一个虚基类子对象只会在派生类中存在一份实体,不管他在继承体系中出现多少次,所以公用一个1byte的classX实体,再加上class Y和class Z这样就有9bytes,如果有对齐的话就是12bytes但是vs2010中省略了那1byte所以就不存在对齐就直接是8bytes。谜底终于揭开了!!!


2楼woshimaijunjinzhen昨天 23:14
很有意思
1楼abcd51685168昨天 07:56
看到楼主这篇很感兴趣,我前两天也写了一篇文章不过只是提问关于各种继承类的sizeof问题,楼主能不能帮我看一下,http://blog.csdn.net/abcd51685168/article/details/8054113,测试环境是vs2010,是32位系统~可能代码贴的有点乱,不过大致意思应该能懂吧~~~期待楼主留言~~

读书人网 >C++

热点推荐