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

Optimization 如果必须在一个代码块中两次使用访问器函数,,optimization,Optimization,我有个问题。假设您必须在一个代码块中调用一个函数两次,并且保证它两次返回相同的值。您应该通过创建额外的变量来优化代码吗 例如: 应该 foo1(v.length()); // foo1 doesn't modify v.length() foo2(v.length()); 改为 int vlen = v.length(); foo1(vlen); foo2(vlen); 为了优化 简而言之,是的 在代码代码块中执行一个代码时,性能的提高可能是可以忽略的,但是如果有一个代码块出现的重复循环,那

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

例如:

应该

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

int vlen = v.length();
foo1(vlen);
foo2(vlen);
为了优化

简而言之,是的

在代码代码块中执行一个代码时,性能的提高可能是可以忽略的,但是如果有一个代码块出现的重复循环,那么您可能会看到一个小的性能增益,因为代码中的调用/ RET意大利面会少一些。然而,随着今天市场上速度更快的处理器的出现,请允许我强调,性能的提高是很小的。此外,在只调用一次v.length的版本中,编译后的代码块可能会小一到两个字节

同样,效率的微小提高是可以忽略不计的。然而,像这样进行优化仍然是最佳实践——特别是如果您有类似于for循环的东西,其中性能增益粗略地乘以函数返回的未更改值被利用和乘以的次数,那么性能增益将被证明是不可忽略的

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

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