【发布时间】:2011-01-21 11:20:04
【问题描述】:
我在 C++ 方面处于基础水平,所以如果我遗漏了一些明显的东西,请见谅。
我正在计划一个可以在两种模式下运行的程序。 它运行的模式将由程序第一次启动时读取的配置文件中的标志决定。 读取此配置文件后,程序将进入循环数百万次的循环。
在循环中的某一时刻,代码会根据配置文件中设置的模式执行不同的操作。
显然我可以使用 IF。如果模式 1 执行操作 1,否则如果模式 2 执行操作 2。 但我想节省 IF 所花费的时间(记住它会发生数百万次)。
为此,我考虑将 actions1 和 actions2 放在各自的函数中并使用函数指针。
然后我可以在循环之前读取配置文件时设置函数指针,并使用该指针代替 IF。
但是,问题是当放入函数时,actions1 和 actions2 有不同的参数,所以我需要两个函数指针来适应这意味着我又需要一个 IF。
我可以使用全局变量来解决这个问题,但我不想这样做。 任何人都可以提出解决此问题的方法吗?
或者我不应该担心数百万个 IF 的成本,编译器会看到做出的决定而不是一遍又一遍地做出决定吗?
编辑:感谢您的回答。 我用这个非常简单的代码做了一个测试:
int i = 2
int p = 10;
for(int f=0;f
{
如果(p == 10)
i = p+f;}
当 if 存在时,它的运行速度实际上比我注释掉它时快 20%。 我想这一定是分支 hpredictor 在起作用,但我仍然不知道为什么它比不使用 if 时更快。
【问题讨论】:
-
很遗憾,您的测试并不好。编译器可以完全优化掉条件,因为
p == 10的值在编译时是已知的。事实上,如果它真的很聪明,它可以完全优化循环(虽然我怀疑它在实践中这样做)。
标签: c++ function if-statement function-pointers