我在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个字节?无论我添加双精度的顺序如何,都会发生这种情况.
谢谢.