【发布时间】:2013-07-12 18:37:17
【问题描述】:
我的代码如下所示:
void function(int parameter)
{
for( ... ) // a big loop
{
double a = ...;
for( ... ) // a big loop
{
double b = ...;
double value;
if(parameter == 1)
value = some_math_expression_1(a, b);
else if(parameter == 2)
value = some_math_expression_2(a, b);
...
}
}
}
我的想法是根据参数我想对a 和b 应用一些数学表达式。这个函数执行了很多次并且必须很快,我想知道每次迭代中的那些条件分支是否会引入我可以节省的开销。
现在,我写了这样的代码:
void function(int parameter)
{
if(parameter == 1)
function1();
else if(parameter == 2)
function2();
else
...
}
如果我在每个functionX() 中重复代码,我可以直接应用数学表达式。明显的问题是,当我想更改一段代码时,我必须多次执行(我现在有大约 10 个数学表达式)。
我可以使用什么方法来避免function 中的任何开销?
如果我将指向函数some_math_expression_X 的指针传递给function 会怎样(我会更改函数调用的条件)?
如果我将整个函数编码为宏 (uf) 并将数学表达式设置为参数会怎样?
如果我使用模板并将数学表达式作为指向内联函数的指针传递会怎样(这甚至可能)?
编辑:感谢您的回答。我知道我可以使用您提出的方法(指向/函数数组的指针,或依赖分支预测器)。但是,您是否对在避免开销方面更好的方法有所了解?数学表达式非常简单(类似于a*b),除了很长的循环之外,function 也被多次调用(分支预测在调用之间“存活”吗?)。
【问题讨论】:
标签: c++