#include <iostream>
是的,rhel5.4 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
lz是64位环境么。。。
用我的系统编译出来字节和你的不一样,原因就是我的默认是pack(4)
系统默认一般是pack(8),字节对齐首先按照最高位对齐,一个结构中成员排列位置不一样对齐后的结构大小也不一样。对于虚函数我们都知道实例对象中会建立一个虚地址指针如果是虚继承而且有成员的话,子类实例中增加一个指针用来指向父类的首部,也就是说虚继承的子类在实例化时除了虚地址表指针外还会多一个指针。
呃.这个..... 可以找点 C++对象模型 的书看看. 本人没考究过. virtual是虚继承,虚继承的基类构造方法由派生链上最后一个子类调用(而普通继承是由它的直接子类调用),这保证了虚继承的父类对象在内存中只有一份,否则正常情况下 某些多继承是有多个父类对象的. (如经典的 菱形继承)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(7)
是的,rhel5.4 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
lz是64位环境么。。。
用我的系统编译出来字节和你的不一样,原因就是我的默认是pack(4)
系统默认一般是pack(8),字节对齐首先按照最高位对齐,一个结构中成员排列位置不一样对齐后的结构大小也不一样。
对于虚函数我们都知道实例对象中会建立一个虚地址指针
如果是虚继承而且有成员的话,子类实例中增加一个指针用来指向父类的首部,也就是说虚继承的子类在实例化时除了虚地址表指针外还会多一个指针。
引用来自“夜游神(Lunar)”的答案
呃.这个..... 可以找点 C++对象模型 的书看看. 本人没考究过. virtual是虚继承,虚继承的基类构造方法由派生链上最后一个子类调用(而普通继承是由它的直接子类调用),这保证了虚继承的父类对象在内存中只有一份,否则正常情况下 某些多继承是有多个父类对象的. (如经典的 菱形继承)
#include <iostream>
#include <iostream>