不优化编译器情况下代码C/C++代码优化
请教下各位,不考虑编译器优化的情况下,请问怎样写才能是次数最少的方式,立马给分,谢谢.
for( i = 1; i < 720; i++ )
{
for( j = 1; j < 1280; j++ )
{
pix = (pY[(i - 1) * 1280+ j - 1] * v1) +
(pY[(i - 1) * 1280+ j ] * v1) +
(pY[(i - 1) * 1280+ j + 1] * v1) +
(pY[(i ) * 1280+ j - 1] * v1) +
(pY[(i ) * 1280+ j ] << v2) +
(pY[(i ) * 1280+ j + 1] * v1) +
(pY[(i + 1) * 1280+ j - 1] * v1) +
(pY[(i + 1) * 1280+ j ] * v1) +
(pY[(i + 1) * 1280+ j + 1] * v1);
}
}
优化?c/++
[解决办法]
最简单的把(i - 1) * 1280,i*1280, (i + 1) * 1280放在循环外边计算:
int a1=(i - 1) * 1280;
int a2=a1+1280;
int a3=a2+1280;
里面用这三个替换就可以了
而且里面乘v1可以先加后乘
[解决办法]
少作点儿乘法呗.
for( i = 1; i < 720; i++ )
{
auto const p0 = pY + (i-1)*1280;
auto const p1 = p0 + 1280;
auto const p2 = p1 + 1280;
for( j = 1; j < 1280; j++ )
{
pix =(p0[j-1]+p0[j]+p0[j+1]+
p1[j-1]+ p1[j+1]+
p2[j-1]+p2[j]+p2[j+1])*v1+
p1[j]<<v2;
}
}