C语言代码优化
来源:互联网 发布:文明6 mac下载 编辑:程序博客网 时间:2024/04/30 10:28
(1)Switch语句中根据发生频率来进行case排序
Switch 可能转化成多种不同算法的代码。其中最常见的是跳转表和比较链/树。当switch用比较链的方式转化时,编译器会产生if-else-if的嵌套代码,并按照顺序进行比较,匹配时就跳转到满足条件的语句执行。所以可以对case的值依照发生的可能性进行排序,把最有可能的放在第一位,这样可以提高性能。此外,在case中推荐使用小的连续的整数,因为在这种情况下,所有的编译器都可以把switch 转化成跳转表。
(2)while循环和do…while循环
用while循环时有以下两种循环形式:
unsigned int i;
i=0;
while (i<1000)
{
i++;
//用户程序
}
或:
unsigned int i;
i=1000;
do
{
i--;
//用户程序
}
while (i>0);
在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。
(3)提升循环的性能
要提升循环的性能,减少多余的常量计算非常有用(比如,不随循环变化的计算)。
不好的代码(在for()中包含不变的if()):
for( i 。。。 )
{
if( CONSTANT0 )
{
DoWork0( i ); // 假设这里不改变CONSTANT0的值
}
else
{
DoWork1( i ); // 假设这里不改变CONSTANT0的值
}
}
推荐的代码:
if( CONSTANT0 )
{
for( i 。。。 )
{
DoWork0( i );
}
}
else
{
for( i 。。。 )
{
DoWork1( i );
}
}
如果已经知道if()的值,这样可以避免重复计算。虽然不好的代码中的分支可以简单地预测,但是由于推荐的代码在进入循环前分支已经确定,就可以减少对分支预测的依赖。
(4)选择好的无限循环
在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (;;)。这两种方法效果完全一样,但那一种更好呢?然我们看看它们编译后的代码:
编译前:
while (1);
编译后:
mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
编译前:
for (;;);
编译后:
jmp foo+23h
显然,for (;;)指令少,不占用寄存器,而且没有判断、跳转,比while (1)好。
- 优化C语言代码
- C语言代码优化
- 优化C语言代码
- C语言代码优化
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- C语言代码优化方案
- 关于优化C语言代码
- 如何优化C语言代码
- c语言代码的优化
- 如何优化C语言代码
- 如何优化C语言代码
- 如何优化C语言代码
- sscanf用法
- python2.7.1编码问题
- VMware Linux安装RAC出现Failure at final check of Oracle CRS stack 10的解决
- 【Android】屏幕适配——屏幕规格与分辨率对照表
- Fermat素性测试, Miller-Rabin素性测试
- C语言代码优化
- SICP习题解答2.1-2.6
- IOS开发中的UIScreen、UIView、UIWindow和UIViewController
- epoll为什么快 及和select区别
- linux线程(一)
- 反汇编算法介绍和应用——线性扫描算法分析
- 数据库中的NULL 在mfc界面中显示的结果
- 使用dx9sdk为vs2008 搭建directx环境
- poj 3304