c – 阻止编译器优化的多态性示例?

不记得我现在在哪里看到它 – 但在某处我读到动态多态性阻止编译器进行各种优化.

除了内联之外,还有人可以通过任何多态性阻止编译器制作的“错过”优化机会的例子来启发我吗?

最佳答案 附:

Derived d;
d.vMethod(); // that will call Derived::vMethod statically (allowing inlining).

使用(除非在C 11中将Derived或Derived :: vMethod中的一个声明为final):

void foo(Derived& d)
{
    d.vMethod(); // this will call virtually vMethod (disallowing inlining).
}

虚拟呼叫有额外的成本(通过vtable的间接).

C 11引入了final关键字,它可以打开静态调用中的最后一个例子.

点赞