【发布时间】:2013-11-14 13:44:46
【问题描述】:
假设您有一个非常大的图,在其节点上进行了大量处理(例如每个节点有数千万次操作)。每个节点的核心例程都是相同的,但是根据内部条件还有一些额外的操作。可能有 2 个这样的条件产生 4 个案例 (0,0), (1,0), (0,1), (1,1)。例如。 (1,1) 表示这两个条件都成立。条件在程序中建立一次(每个节点独立设置一组),从那时起,永远不会改变。不幸的是,它们是在运行时以完全不可预测的方式确定的(基于通过 HTTP 从外部服务器接收的数据)。
在这种情况下最快的是什么? (考虑到我不知道的现代编译器优化)
- 只需使用“IFs”:如果(条件 X)执行附加操作 X。
- 使用继承从基类派生四个类(暴露方法OPERATION)以进行正确操作并节省数千万“ifs”。 [但我不确定这是否是真正的节省,继承也必须有它的开销)
- 使用函数指针根据条件分配函数一次。
我需要很长时间才能自己测试它(我还没有这么大的数据,这将被集成到更大的项目中,因此测试所有版本并不容易)。
阅读答案:我知道我可能必须尝试一下。但除此之外,这是一个更快的问题:
数以百万计的 IF 语句和正常的静态已知函数调用 VS 函数指针调用 VS 继承,我认为在这种情况下这不是最好的主意,我正在考虑从进一步检查中消除它感谢任何建设性的答案(不是说我不应该关心这些小事;)
【问题讨论】:
-
Related stackoverflow.com/q/11957632/332733 另外这个问题太宽泛了,请缩小到可以回答的范围
-
看这里:stackoverflow.com/questions/1955074/…函数指针应该比虚拟方法快
-
您可以通过对您的选择进行基准测试来获得准确的答案。
-
@BlueMonkMN 函数指针或虚函数可能比
if语句慢。通过if语句,CPU 可以使用分支预测和推测执行。 -
@MaximYegorushkin 如果您担心管道停顿......您应该首先解决所有算法问题。如果事先优化,这个问题很糟糕。
标签: c++ performance inheritance optimization