编译器 虚拟函数调用的优化
Compiler Optimization of virtual function calls
说明为什么在运行时会发生虚拟调度的最流行示例是在编译时无法确定将创建哪个派生类。例如:
Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());
或者当它取决于用户输入时。
假设情况并非如此,并且可以在编译时完全确定基指针引用的派生类。
如果在编译时知道基类指针指向哪个派生类,编译器是否通过用适当的派生函数替换虚拟函数而不是在运行时执行 vtable 查找来优化虚函数调用?
这种优化称为去虚拟化。至少Clang执行了它,请参阅此博客文章和邮件列表中的此文章。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- C++延迟后的优化器调用函数
- 编译器 虚拟函数调用的优化
- 根据全局日志级别优化日志函数调用
- C++:优化析构函数调用
- C++编译器是否优化重复的函数调用
- 下面的代码会被优化为一个函数调用吗
- C/C++中使用常量优化的函数调用
- 使用大型局部变量(C++)优化频繁调用的函数
- 优化外函数调用
- 为什么全局变量会给函数调用中的编译器优化带来麻烦
- 返回值优化和析构函数调用
- gcc是否会优化对相同变量的重复函数调用,并为每次调用提供相同的输出?
- 派生类中虚函数调用的优化
- 使用返回值优化get和函数调用周围的循环