优化"for"循环

Mar*_*ari 3 c++ optimization

std::vector<int> someVector;    
for (unsigned int i = 0; i < someVector.size(); i++)
{
   // do something
}
Run Code Online (Sandbox Code Playgroud)

每次都someVector.size()计算得到的值?

Ste*_*ein 5

我已经与GCC资源管理器核对过:

输入的代码:

#include<vector>

int sum(const std::vector<int> & someVector) {
  int s = 0;
  for (int i = 0; i < someVector.size(); i++) {
    s += someVector[i];
  }
  return s;
}

int main() {
  std::vector<int> someVector;
  return sum(someVector);
};
Run Code Online (Sandbox Code Playgroud)

为sum()生成的汇编:

  movq  (%rdi), %rcx
  movq  8(%rdi), %rdx
  xorl  %eax, %eax
  cmpq  %rcx, %rdx
  je    .LBB0_3
  subq  %rcx, %rdx
  sarq  $2, %rdx
  xorl  %eax, %eax
  xorl  %esi, %esi
.LBB0_2:                                # =>This Inner Loop Header: Depth=1
  addl  (%rcx,%rsi,4), %eax
  incq  %rsi
  cmpq  %rdx, %rsi
  jb    .LBB0_2
.LBB0_3:                                # %._crit_edge
  ret
Run Code Online (Sandbox Code Playgroud)

即保持大小%rdx- size()每次都没有电话.

正如其他人已经指出的那样,结果可能取决于

  • 你的编译器,
  • 优化设置和
  • 你在循环中实际做了什么(单击上面的gcc explorer链接尝试自己).

没有计算任何东西,整个循环就会被优化掉.