我有一个看起来像这样的代码:
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
and的参数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
还被多次调用(分支预测是否在调用之间“存活”?)。