如何解决调用std :: function :: Operator的开销
我有一个用例,其中基于对const成员变量的读取,我将在两种不同的逻辑之间进行切换:
void foo(){
if(member_var_){ // const,initialized at object creation
a();
} else {
b();
}
}
此foo()
在我的代码中被多次引用,因此我想知道,不是在运行时基于member_var
进行分支,我也许可以消除对象构建的这一步骤:>
private std::function<void()> action_; // foo() just calls action_()
// Constructor
if(member_var_){
action_ = a;
} else {
action_ = b;
}
但是,我发现benchmark的性能下降了 7倍,我预计由于重定向会导致性能下降(额外的函数调用开销和一些代码缓存丢失),但是7时代有点令人惊讶,我在source code中找不到任何令人担忧的东西,也许有人对此有见识?还有没有比反复检查bool变量更好的解决方案了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。