3

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

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 编译器中的优化器会为我展开这个循环,还是我最好手动完成?我查看了其他类似的问题,但没有看到任何具体结果。我

4

1 回答 1

1

真正的问题是,你从展开中得到什么?

每次“展开”时,展开都会刮掉一个分支 ( if i >= 8 stop)。

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

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

于 2013-03-07T10:43:32.660 回答