我有以下一段简单的代码,它可能会被执行数亿次;
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 编译器中的优化器会为我展开这个循环,还是我最好手动执行?我看过 other similar questions但看不到任何具体结果。我
最佳答案
真正的问题是,您从展开中获得了什么?
对于每个“展开”,展开都会刮掉一个分支(if i >= 8 stop
)。
你的循环体已经包含了 6 个分支 (if
* 1, ||
* 2, &&
* 3);那么展开它有很多好处吗?
看看代码是如何优化的可能会很有趣;但我不确定展开是否应该是您的主要关注点,我更担心如何处理复杂的情况!
关于c++ - VS2010 C++优化是否做循环展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15266923/