【发布时间】:2013-08-10 17:46:35
【问题描述】:
1.为什么Derived4类的大小显示为8字节??
class Empty
{};
class Derived4 : virtual public Empty
{
char c;
};
2.而Derived2类的大小显示为4字节??
class Empty
{};
class Derived2 : virtual public Empty
{};
【问题讨论】:
-
填充到单词边界?如果添加
char字段会怎样? -
这是实现定义的,因此几乎不可能回答,但你为什么要关心呢?
-
我敢打赌。 vtable 导致了额外的 4 个字节,并且感觉“char”只有 1 个字节,最终总共有 5 个字节。编译器可能在使用 8 个字节值的指令上将其设置为 8 个字节
-
你会注意到
Derived4的布局中有一个int32_t(**)(...)类型的隐藏指针:coliru.stacked-crooked.com/… -
正如其他人所说,这是实现定义的。该标准仅讨论各种类型的最小大小(例如,char 最小为 1 个字节,但原则上它可以是任何更大的数字)。顺便说一句,您使用的是什么编译器?