c++ - 在 null 与 null 对象性能上的分支
问题描述
哪个最有效:使用 null 对象,或 nullptr 上的分支。C++ 中的示例:
void (*callback)() = [](){}; // Could be a class member
void doDoStuff()
{
// Some code
callback(); // Always OK. Defaults to nop
// More code
}
对比
void (*callback)() = nullptr; // Could be a class member
void doDoStuff()
{
// Some code
if(callback != nullptr) // Check if we should do something or not
{callback();}
// More code
}
假设编译器无法内联它,null 对象将始终执行间接函数调用。使用nullptr,总会做分支,如果有事要做,也会做间接函数调用。
用指向抽象基类的指针替换回调会影响决策吗?
callback
设置为 nullptr 以外的东西的可能性如何。我猜如果callback
最有可能是nullptr,那么使用附加分支会更快,对吧?
解决方案
这些问题都不能先验地回答。它们将取决于无数因素,包括但不限于硬件的细节、调用时缓存的细节、围绕此类调用的各种代码(可能隐藏任何引入的延迟)、编译器的内联/去虚拟化能力(这又取决于所有代码的具体细节)等等。
仅当您拥有要优化的确切代码,并且确定所讨论的代码是值得进行此类优化的性能问题时,才应尝试此类微优化。
推荐阅读
- laravel - Laravel 在 git pull 后不显示图标
- asp.net-mvc-5 - 如何在 MVC5 中创建角色并分配给用户
- angular - 如何以最简单的方式将 Mat-Datepicker 日期格式更改为 DD/MM/YYYY?
- asp.net - 从中间件中排除控制器
- c# - 在 sitecore 9.0 中应该复制多少数据库(发布者、分发者、订阅者)?
- android - 使用 PJSIP 开源库进行 VoIP 媒体和信号处理
- c++ - 位图算法
- python - raw_input() 无法正确运行,因为语法分析器
- prestashop-1.7 - 如何将本地开发的 Prestashop 移动到托管服务器
- makefile - GNU 制作 | 如何在源代码层次结构和编译器输出 h-hy 之间创建依赖关系?