Я пытаюсь перейти на gcc 7.2 с gcc 4.9 (gcc-arm-none-eabi, -O2). Мой код успешно собирается, но результат программы больше, чем на gcc 4.9.
Я провожу некоторое расследование и понимаю, что размер «не виртуального thunk на xxx» слишком велик, если переопределить функцию, определенную в классе:
struct IA { virtual void fa() = 0; };
struct IB { virtual void fb() = 0; };
struct C : IA, IB {
void fa() override {}
void fb() override // If I place definition here,
// size of "non virtual thunk to C::fb()" is almost the same, as the function itself
};
// but if I place definition outside the class,
// size of non virtual thunk is about 6-8 bytes, same as in gcc4.9
Может есть вариант, который предотвращает такое встраивание?
Задача ещё не решена.
Других решений пока нет …