嵌套for循环优化: 次数少的放外面 && 变量少实例化 && 用++i
for (int i = 0; i < 20000; ++i)
for (int j = 0; j < 2000; ++j)
for (int k = 0; k < 200; ++k)
testFunction(i, j, k);
怎么优化?
1. 循环次数少的放外面, 先200,再2000,再20000,分析见这篇文章
2. 减少循环变量实例化次数, 先int i,j,k; 再写循环语句
3. ++i比i++效率高,因为
++i; // Fetch i, increment it, and return it
i++; // Fetch i, copy it, increment i, return copy
对于int来说没什么差别, 如果i是object或iterator, 由于避免了copy操作, 效果比较明显。
测了一下, 1的效果明显, 2和3效果不明显, 编译器是g++
$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.2
Thread model: posix
2014年1月15日 01:30
2 和 3 不明显是因为现代编译器会优化。它们应该会生成一样的代码(至少在开启优化时)。
2014年1月15日 08:11
嗯, 现代的编译器真强大@依云: