c++ - 优化 "for"循环

标签 c++ optimization

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

someVector.size() 的值是否每次都计算

最佳答案

我已经检查过 GCC explorer :

输入的代码:

#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);
};

为 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

即大小保存在 %rdx 中——每次都不会调用 size()

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

  • 你的编译器,
  • 优化设置和
  • 您在循环中实际执行的操作(单击上面的 gcc 资源管理器链接亲自尝试)。

无需计算任何东西,整个循环就会得到优化。

关于c++ - 优化 "for"循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747036/

相关文章:

c++ - 如何取输入到 C++ 程序中的值的平均值?

java - 我应该如何提高这段代码的缓存友好性? (3D 复数数组到 2D 矩阵的 1D 数组)

c++ - 在 C++ 中优化时间(NULL)调用

c++ - decltype(auto) 函数返回类型不推导 && 类型

Python、PyTables - 利用内核内搜索

mysql - 最佳观看次数策略

c++ - 在线程争用情况下等待的最快方法

c++ - 'using' 关键字从多个虚拟继承函数中进行选择

c++ - 如何将谓词传递给算法

c++ - to_string 不是 std 的成员,g++ (mingw) 说