c++ - 用指针替换循环索引器有什么好处吗?

标签 c++ visual-c++ optimization micro-optimization

假设:

const int n = bigNumber;
float* f = someData;

转换有什么意义

for (int i = 0; i < n; i++)
{
    f[i] += 1;
}

float* lastF = f + n;
for (float* i = f; i < lastF; i++)
{
    *i += 1;
}

天真地看着这个,似乎我为每次迭代保存了一个加法运算(f[i])。

当然,这是假设我对循环内索引器的值不感兴趣。

  1. 我的这种心态是否正确?
  2. 如果是这样,我的编译器是否足够聪明,可以自行执行此操作(假设启用了所有优化标志)?

我会检查反汇编,但我不擅长阅读这些内容。

最佳答案

没有任何好处。如今,任何编译器都可以比大多数程序员做得更好更快。

如果 f[i++] 在您的代码中比 *fp++ 更具可读性,请不要三思。它们将被编译为完全相同的目标代码。

关于c++ - 用指针替换循环索引器有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097906/

相关文章:

c++ - 我可以避免 RTTI 吗?

c++ - 智能指针可能的内存泄漏

c++ - 无法在 x86 上以 SSE 类型访问内存,但在 x64 上工作正常

mysql - 将 MVC++ 与 SQLAPI++ 连接起来

c - 为什么glibc的strlen需要这么复杂才能快速运行?

javascript - Jquery/Javascript 速度……我真的应该关心吗?

performance - DNS 预取和页面优化

c++ - "Expected constructor, destructor, or type conversion before ' < ' token"

c++ - 在 .vcproj RelativePath 中使用 "User Macro"

c++ - “CObject::CObject”:无法访问类 'CObject' d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h 中声明的私有(private)成员