返回信息流最近在看《深度探索C++对象模型》
里面有一段说:
class A{};
class B:public virtual A{};
class C:public virtual A{};
class D:public B,public C{};
问:sizeof(A),sizeof(B),sizeof(C),sizeof(D)的大小分别是什么?
这是一条镜像帖。来源:北邮人论坛 / cpp / #85338同步于 2015/1/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个比较老的问题
libenchao
2015/1/19镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这个跟编译器有关的,没有标准答案,不妨把你的测试结果发下,看看有没有人能解释
【 在 libenchao 的大作中提到: 】
: 写了,但是跟书上写的不一样,所以过来问问大家。
:
我的测试结果是1,8,8,16
编译器是Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
linux我也试过了,也是这个结果。
前三个到时可以理解,就是最后一个不可理解。
【 在 gaoweiwei 的大作中提到: 】
: 这个跟编译器有关的,没有标准答案,不妨把你的测试结果发下,看看有没有人能解释
B里有一个虚表指针,C里有一个虚表指针,D里包含这两个虚表指针。这是G++的内存布局方式,Clang++一样。
【 在 libenchao 的大作中提到: 】
: 我的测试结果是1,8,8,16
: 编译器是Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
: linux我也试过了,也是这个结果。
: ...................
那1,8,8,12的情况是不是就是D把B和C的两个指针只保留了一个?
【 在 gaoweiwei 的大作中提到: 】
: B里有一个虚表指针,C里有一个虚表指针,D里包含这两个虚表指针。这是G++的内存布局方式,Clang++一样。
不是吧,指针是8字节的
【 在 libenchao 的大作中提到: 】
: 那1,8,8,12的情况是不是就是D把B和C的两个指针只保留了一个?
:
是不是这已经是优化掉多出来的1byte的结果了啊,因为指针本身就是8byte,所以结果是现在这样?
【 在 gaoweiwei 的大作中提到: 】
: 不是吧,指针是8字节的
什么编译器会得出1,8,8,12的结果?
【 在 libenchao 的大作中提到: 】
: 是不是这已经是优化掉多出来的1byte的结果了啊,因为指针本身就是8byte,所以结果是现在这样?
: