Откуда взялись дополнительные 4 байта?
struct Something {
int some_field {};
virtual void SomeMethod() {}
};
int main() {
// Размер и выравнивание vptr
std::cout << "sizeof(void*) = " << sizeof(void*) << std::endl;
std::cout << "alignof(void*) = " << alignof(void*) << std::endl;
// Размер и выравнивание поля
std::cout << "sizeof(int) = " << sizeof(int) << std::endl;
std::cout << "alignof(int) = " << alignof(int) << std::endl;
// Размер и выравнивание структуры
std::cout << "sizeof(Something) = " << sizeof(Something) << std::endl;
std::cout << "alignof(Something) = " << alignof(Something) << std::endl;
return 0;
}
Пишет:
sizeof(void*) = 8
alignof(void*) = 8
sizeof(int) = 4
alignof(int) = 4
sizeof(Something) = 16 ???
alignment(Something) = 8
Не понятно откуда еще 4 байта взялось, ведь размер vptr 8 байт, а поля some_filed - 4 байта, т.е.: 8 + 4 = 12 != 16. Если это связано с выравниванием, то все равно не понятно, ведь int размещается на адресах кратных 4, там не должно быть padding'a.
P.S. Компилятор msys64\...\clang.exe. Компиляция в режиме Debug.