Информация об изменениях

Сообщение Re[2]: MSVC: Warning: padding added от 20.07.2023 19:28

Изменено 20.07.2023 19:37 пффф

Re[2]: MSVC: Warning: padding added
Здравствуйте, sergii.p, Вы писали:

П>>Как быть?


SP>отключить этот ворнинг по всему проекту.


Этого делать бы не хотелось.


SP>Или смотреть каждый класс отдельно. Скорее всего у вас компилятор добавляет лишние байты для выравнивания


Ну, как бы да, я об этом догадался из сообщения компилятора


SP>Н-р:

SP>
SP>struct MyStruct {
SP>    char tag[4];
SP>    MyStruct* ptr;
SP>};
SP>

SP>При выравнивании по 8 байт между tag и ptr влезут лишние 4 байта. Наверное вы этого не хотели и были бы не против поменять порядок полей в классе для минимизации размера.

Это да, но у меня есть классы вообще без мемберов, но с виртуальными функциями, типа такого:
struct MyInteface
{
    virtual void method() = 0;
    virtual ~MyInteface() {}
};

struct MyIntefaceImpl : public MyInteface
{
    virtual void method() override
    {}
};


Вот на всё это тоже варнинги о выравнивании выдаёт
Re[2]: MSVC: Warning: padding added
Здравствуйте, sergii.p, Вы писали:

П>>Как быть?


SP>отключить этот ворнинг по всему проекту.


Этого делать бы не хотелось.


SP>Или смотреть каждый класс отдельно. Скорее всего у вас компилятор добавляет лишние байты для выравнивания


Ну, как бы да, я об этом догадался из сообщения компилятора


SP>Н-р:

SP>
SP>struct MyStruct {
SP>    char tag[4];
SP>    MyStruct* ptr;
SP>};
SP>

SP>При выравнивании по 8 байт между tag и ptr влезут лишние 4 байта. Наверное вы этого не хотели и были бы не против поменять порядок полей в классе для минимизации размера.

Это да, но у меня есть классы вообще без мемберов, но с виртуальными функциями

Об этом и было сообщение в стартовом посте:

П>

П>warning C4820: 'MyClass': '4' bytes padding added after data member 'MyClass::{vbptr}' 
П>


Типа такого:
struct MyInteface
{
    virtual void method() = 0;
    virtual ~MyInteface() {}
};

struct MyIntefaceImpl : public MyInteface
{
    virtual void method() override
    {}
};


Вот на всё это тоже варнинги о выравнивании выдаёт