现代的编译器将如何优化此代码:
int fn (int a, int b)
{
int sum = 0;
for(int i=4*a; i>0; i--)
{
sum += b*i*i;
}
return sum;
}
答案 0 :(得分:2)
这个问题没有简单的答案,因为有许多编译器,并且许多标志可以修改使用的编译和优化,并且取决于目标体系结构,可以使用不同的优化。
您最好的尝试是去compiler explorer并检查具有不同标志的不同编译器生成的程序集。如果要比较输出,则需要了解汇编。如您所见,对于相同的代码和相同的优化级别,最新版的gcc和clang产生了截然不同的版本。