VS2010 c++优化做循环展开吗?

Does VS2010 C++ optimization do loop unrolling

本文关键字:循环展开 c++ 优化 VS2010      更新时间:2023-10-16

我有一段简单的代码,它可能会被执行数亿次;

for (int i = 0; i < 8; i++)
    if (((p[i].X >= x) && (p[i].X <= x + d))
        &&((p[i].Y >= y) && (p[i].Y <= y + d))
        &&((p[i].Z >= z) && (p[i].Z <= z + d)))
      return 1;

Visual c++ 2010编译器中的优化器会为我展开这个循环吗,还是我最好手动执行?我看过其他类似的问题,但没有看到任何具体的结果。我

真正的问题是,您从展开中获得了什么?

每一次"unroll"将削去一个分支(if i >= 8 stop)。

你的循环体已经包含6个分支(if * 1, || * 2, && * 3);那么展开它有什么好处吗?

看看代码是如何优化的可能会很有趣;但我不确定展开是否应该是你的主要关注点,我更担心的是如何处理复杂的情况!