0

我尝试从 gcc 4.9 (gcc-arm-none-eabi, -O2) 迁移到 gcc 7.2。我的代码构建成功,但结果程序比 gcc 4.9 上的要大。

我做了一些调查并意识到,如果在类中定义了覆盖函数,那么“xxx 上的非虚拟 thunk”的大小太大了:

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

可能有一个选项可以防止这种内联?

4

0 回答 0