滴水逆向联盟
标题:
怎样提高循环语句的效率
[打印本页]
作者:
夺命书生
时间:
2014-11-7 16:20
标题:
怎样提高循环语句的效率
本帖最后由 夺命书生 于 2014-11-7 18:52 编辑
在C语言程序中,常常使用循环结构来解决特定的问题,那么在设计程序的时候,如何才能提高循环语句的效率呢?
C语言循环语句中,for 语句使用频率最高,while 语句其次,do 语句比较少用。
提高循环语句效率的基本方法是,降低循环体的复杂性,先说说几种提高循环效率的情况。
一. 直接提高循环语句的效率
1.在多重循环中如果有可能,应该将最长的循环放在最内层,最短的循环放在最外层,
以减少CPU 切换循环层的次数,例如下面的两种写法。
写法一(长的循环在外层)
for(i=0;i<100;i++)
{
for(k=0;k<10;k++)
{
sum=sum +a[i][k];
}
}
复制代码
写法二(长的循环在内层)
for(k=0;k<10;k++)
{
for(i=0;i<100;i++)
{
sum=sum +a[i][k];
}
}
复制代码
2.如果在循环体内,再做逻辑判断,并且循环次数较大,应该将逻辑判断移到循环体的外面。
写法一(效率低但程序简洁)
for(i=0;N<10;i++)
{
if(condition)
{
dosomething();
}
else
{
dosomething();
}
}
复制代码
写法二(效率高但程序不简洁易读)
if(condition)
{
for(i=0;N<10;i++)
{
dosomething();
}
}
else
{
for(i=0;N<10;i++)
{
dosomething();
}
}
复制代码
写法一比写法二多执行了N-1次逻辑判断,并且由于写法一每次循环都要进行逻辑判断,打断了循环模式,
使得编译器不能对循环进行优化处理,降低了效率。
如果N 的量非常大,最好采用第二种写法,可以提高效率,如果 N 的量非常小,两者效率差别不明显,
采用写法一比较好,代码简洁易读。
二. 简洁提高循环语句的效率
1.对于简单的,if...else 语句,建议使用C语言的三目运算符,“ ?:” 代替,以提高程序的执行效率。
if(i<20)
{
a=1;
}
else
{
a=1;
}
复制代码
可以写成
a=(i<20)?1:6
复制代码
2.在程序中不允许出现一下风格
if(i<20)
return a;
return b;
复制代码
应该写成
if(i<20)
{
return a;
}
else
{
return b;
}
复制代码
3.对于 switch 语句,在每个 case 的后面不要忘记加 break , 除非你想某几个分支重叠。
4.switch 语句,一定要有 default ,既使它不做什么。
作者:
OneTime
时间:
2014-11-7 21:12
从来没有研究过介个问题哦,我去试试去!
作者:
夺命书生
时间:
2014-11-7 21:35
OneTime 发表于 2014-11-7 21:12
从来没有研究过介个问题哦,我去试试去!
这都没试过,你写啥代码?
欢迎光临 滴水逆向联盟 (http://dtdebug.com/)
Powered by Discuz! X3.2