打印

C语言优化小技巧

[复制链接]
711|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2019-1-4 12:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言优化小技巧

在编写C语言程序后,经常需要对源码进行优化,以提高程序的运行效率,下面简述几个常用的优化技巧以供大家参考:


1.C于代码在程序中的优化
       现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码长度的平衡。如果要获得更小且执行效率更高的代码,需要程序员手工对代码进行优化。



2.变量类型的定义
      不同的数据类型所生成的机器代码长度相差很多,变量类型选取的范围越小运行速度越快,占用的内存越少。能够使用char(字符型)定义的变量,就不要使用整型(int)变量定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点(float)变量就不要使用浮点型(double)变量。
       相同类型的数据类型,有无符号对机器代码长度也有影响。因此我们应按照实际需要合理的选用数据类型。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。



3.提高循环语言的效率
       在 C 语言中循环语句使用频繁,提高循环体效率的基本办法就是降低循环体的复杂性。在多重循环中,应将最长的循环放在最内层,最短的循环放在最外层。这样可以减少 CPU跨切循环的次数。如例 1-1 的效率比 1-2 的效率要高:

int i,j;

for (i = 0; i < 10; i++)
{
    for (j = 0; j < 20; j++)
    {
        ... ...
    }

} // 例子 1-1

for (j = 0; j < 20; j++)
{
    for (i = 0; i < 10; i++)
    {
        ... ...
    }

} // 例子 1-2


4.采用数学方法优化程序
       数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学算**对程序的执行效率有数量级的提高。有时候这个问题常常被大家忽略, 对于没有经验的程序员来说更是如此。例如:1100的自然数和sum = 100*(100+1)/2; 数学公式. (n + 1)*n/2
      优化算法和数据结构对提高代码的效率有很大的帮助。当然有时候时间效率和空间效率是对立的,此时应分析哪个更重要,做出适当的折中。另外,在进行优化的时候不要片面的追求紧凑的代码,因为紧凑的代码并不能产生高效率的机器码。


评论
dirtwillfly 2019-1-4 21:29 回复TA
感谢分享 

相关帖子

沙发
gygp| | 2019-1-5 21:53 | 只看该作者
使用unsigned int而不是int。

使用特权

评论回复
板凳
chenci2013| | 2019-1-5 21:53 | 只看该作者
使用指针或者函数调用,可以直接修改全局变量的值。

使用特权

评论回复
地板
biechedan| | 2019-1-5 21:53 | 只看该作者
算法级别的显然是最主要的优化        

使用特权

评论回复
5
wangdezhi| | 2019-1-5 21:54 | 只看该作者
编译器编译命令里有设置选项

使用特权

评论回复
6
isseed| | 2019-1-5 21:54 | 只看该作者
减少函数参数的个数

使用特权

评论回复
7
xietingfeng| | 2019-1-5 21:54 | 只看该作者
应该尽可能的不使用char和short类型的局部变量。

使用特权

评论回复
8
suzhanhua| | 2019-1-5 21:55 | 只看该作者
提高程序算法效率

使用特权

评论回复
9
mituzu| | 2019-1-5 21:55 | 只看该作者
占用大的存储空间可以减少执行时间

使用特权

评论回复
10
hellosdc| | 2019-1-5 21:55 | 只看该作者
重复的部分写进一个函数里,然后通过函数调用

使用特权

评论回复
11
uiint| | 2019-1-5 21:56 | 只看该作者
把用的多的运算过程写成独立的函数

使用特权

评论回复
12
mituzu| | 2019-1-5 21:56 | 只看该作者
使用#define定义常量和小的函数实现

使用特权

评论回复
13
gygp| | 2019-1-5 21:56 | 只看该作者
有些处理器处理无符号unsigned 整形数的效率远远高于有符号signed整形数

使用特权

评论回复
14
suzhanhua| | 2019-1-5 21:56 | 只看该作者
有些情况嵌套汇编语句效率更高

使用特权

评论回复
15
chenci2013| | 2019-1-5 21:56 | 只看该作者
编译器不能将全局变量的值缓存在寄存器中,但这在使用全局变量时便需要额外的(常常是不必要的)读取和存储。

使用特权

评论回复
16
xietingfeng| | 2019-1-5 21:56 | 只看该作者
通过使用int和unsigned int类型的局部变量来避免这样的移位操作。

使用特权

评论回复
17
biechedan| | 2019-1-5 21:56 | 只看该作者
只能是针对程序进行优化了

使用特权

评论回复
18
isseed| | 2019-1-5 21:56 | 只看该作者
不需要返回值的函数定义为void类型

使用特权

评论回复
19
wangdezhi| | 2019-1-5 21:56 | 只看该作者
通过设置,你可以要求 不优化,也可以要求用哪种优化。

使用特权

评论回复
20
uiint| | 2019-1-5 21:56 | 只看该作者
减少循环的次数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝