Сообщение 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>При выравнивании по 8 байт между tag и ptr влезут лишние 4 байта. Наверное вы этого не хотели и были бы не против поменять порядок полей в классе для минимизации размера.
Это да, но у меня есть классы вообще без мемберов, но с виртуальными функциями, типа такого:
Вот на всё это тоже варнинги о выравнивании выдаёт
П>>Как быть?
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>При выравнивании по 8 байт между tag и ptr влезут лишние 4 байта. Наверное вы этого не хотели и были бы не против поменять порядок полей в классе для минимизации размера.
Это да, но у меня есть классы вообще без мемберов, но с виртуальными функциями
Об этом и было сообщение в стартовом посте:
Типа такого:
Вот на всё это тоже варнинги о выравнивании выдаёт
П>>Как быть?
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
{}
};
Вот на всё это тоже варнинги о выравнивании выдаёт