У меня есть простой класс в C ++, который имеет целое число и vtable:
class Something {
virtual void sampleVirtualMethod();
int someInteger;
};
Если вы посмотрите на расположение объектов для MSVC (используя / d1reportSingleClassLayout), вы получите:
class Something size(8):
+---
0 | {vfptr}
4 | someInteger
+---
Что имеет смысл. 4 байта для указателя vtable и 4 байта для целого числа. Странная вещь, когда я добавляю двойку к классу:
class Something {
virtual void sampleVirtualMethod();
int someInteger;
**double someDouble;**
};
Я получаю макет этого объекта:
class Something size(24):
+---
0 | {vfptr}
8 | someInteger
| <alignment member> (size=4)
16 | someDouble
+---
Почему разница между смещением 0 и некоторым Integer 8 вместо 4? Vtable как-то вырос до 8 байт? Независимо от того, когда я добавляю двойной, это случается.
Спасибо.