编译器对最里层循环能进行更好地优化,对外层循环的优化并非如此。对于多层循环的优化有两种方式:
一是尽量将多层循环从逻辑上改为一层循环,如果可行的话。比如将二层循环改为一层循环:
优化前的代码:
优化后的代码:
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10; j++)
sum += data[i][j];
}
优化后的代码:
for (int i = 0; i < 1000*10; i++)
{
sum += data[i/1000][i%10];
}
二是将循环量大的循环放在里层,循环量小的放在外层。对上面的原始代码进行优化如下:
for (int j = 0; j < 10; j++)
{
for (int i = 0; i < 1000; i++)
sum += data[i][j];
}