如果必须在代码块中使用两次访问器函数,

时间:2014-08-06 19:02:15

标签: optimization

我有一个问题。假设您必须在代码块中调用两次函数,并保证它两次都返回相同的值。您应该通过创建额外的变量来优化代码吗?

示例:

应该

foo1(v.length()); // foo1 doesn't modify v.length()
foo2(v.length());

改为

int vlen = v.length();
foo1(vlen);
foo2(vlen);

是否具有优势?

1 个答案:

答案 0 :(得分:0)

简而言之,是的。

上述代码出现的假设代码块的一次执行的性能提升可能可以忽略不计,但考虑到如果您有一个代码块出现的重复循环,您可能会看到 small 性能提升,因为会有更少的" call / ret"在代码中串穿的意大利面条。然而,由于目前市场上处理器速度更快,请允许我强调性能提升 small 。此外,在您只调用v.length()一次的版本中,已编译的代码块可能会缩小一两个字节。

再次,效率的提高可以忽略不计。然而,它仍然是这样优化的最佳实践 - 特别是如果你有类似for循环的东西,其中性能增益大致乘以未返回的未更改值的次数。功能被利用和倍增,性能增益可以证明是不可忽视的。

unsigned int something = function();
for( unsigned int i = 0; i < something; i ++ )
{
    ...
}

而不是

for( unsigned int i = 0; i < function(); i ++ )
{
    ...
}