Может кто-нибудь объяснить, пожалуйста, результаты, возвращаемые ‘sizeof’ в этом коде

Я не берусь за вывод, показанный ниже.

Я знаю, что всякий раз, когда присутствует виртуальная функция, она создает vptr но размер печати больше, чем я ожидал:

#include<iostream>
using namespace std;

class Base
{
int x;
int y;
int z;
public:
virtual void fun(){}
virtual void fun2(){}
};

class Derived:public Base
{
public:
void fun() override {}
};

int main(int argc, char const *argv[])
{
cout<<sizeof(Base)<<endl;
cout<<sizeof(Derived)<<endl;
cout<<sizeof(int)<<endl;
}

24
24
4
[Закончено за 0,3 с]

-1

Решение

Это 64-битная сборка? Если так, sizeof Base было бы:

8 (указатель vtable) + (3 * 4 = 12) (переменные-члены) + 4 (добавление к кратному 8 байтов)
= 24

поскольку Derived происходит только от Base и не добавляет переменных-членов, его размер такой же.

Почему добавлены отступы? Для поддержания 8-байтового выравнивания в массивах и в стеке. Почему это важно? Это другой вопрос.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]