小编Mas*_*son的帖子

MSVC对象布局Quirk

我在C++中有一个简单的类,它有一个整数和一个vtable:

class Something {

   virtual void sampleVirtualMethod();

   int someInteger;
};
Run Code Online (Sandbox Code Playgroud)

如果你查看MSVC的对象布局(使用/ d1reportSingleClassLayout),你会得到:

class Something       size(8):
        +---
 0      | {vfptr}
 4      | someInteger
        +---
Run Code Online (Sandbox Code Playgroud)

这完全有道理.vtable指针为4个字节,整数为4个字节.奇怪的是当我在类中添加一个double:

class Something {    
    virtual void sampleVirtualMethod();
    int someInteger;
    **double someDouble;**
};
Run Code Online (Sandbox Code Playgroud)

我得到这个对象布局:

class Something       size(24):
        +---
 0      | {vfptr}
 8      | someInteger
        | <alignment member> (size=4)
16      | someDouble
        +---
Run Code Online (Sandbox Code Playgroud)

为什么0 offset和someInteger 8之间的差异而不是4?vtable是否以某种方式增长到8个字节?无论我添加双精度的顺序如何,都会发生这种情况.

谢谢.

c++ compiler-construction virtual layout object

6
推荐指数
1
解决办法
895
查看次数

标签 统计

c++ ×1

compiler-construction ×1

layout ×1

object ×1

virtual ×1