我正在为图形编写一个小型专用 C99 库,我经常得到以下形式的循环:
for(int i = 0; i < graph->nvertices; ++i) {
// ...
}
我想知道这是否是一个好的做法,尤其是在 tigh 循环的情况下。起初我认为编译器会足够聪明,只查看一次“graph->nvertices”,而不是在每次迭代时都查看它,但这似乎是不可能的,因为 graph->nvertices 可能会在循环内发生变化。编写起来更智能、更快速:
const int N = graph->nvertices;
for(int i = 0; i < N; ++i) {
// ...
}
它似乎更快,因为它不需要多次查看指针,但它确实需要创建一个新变量。
注意:我想在这种情况下,能够阅读一些汇编代码以查看编译器实际在做什么是很好的,如果有人有很好的引用,我愿意接受建议。
最佳答案
尝试使用更高的优化设置,一些编译器应该能够为您优化它。您也可以向后迭代,仅使用以下表达式初始化计数器:
for (int i = graph->nvertices; i >= 0; --i)
..
但是,您将对缓存性能造成严重破坏。我认为您建议的方法是最直接的,这有助于编译器和下一个阅读您代码的人清楚地了解自己。
关于c - 循环计数器和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336726/