gpt4 book ai didi

c++ - 优化 "for"循环

转载 作者:太空狗 更新时间:2023-10-29 19:58:54 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com