学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

C语言高效编程四法

 一、空间换时间
   例如:字符串的赋值方法A:

 #define LEN 32char stringl[LEN];et(stringl,0,LEN);strcpy(stringl,“This is anexample!!”);方法B:

 const char string2[LEN]=“thisis an example!!”;char *cp;cp=string2;从上面的例子可以看出,方法A和方法B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A要调用两个字符函数才能完成。B的缺点在于灵活性没有A好,在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。  

 二、运用数学方法
   在编写程序时,采用一些数学方法会大大提高程序的执行效率。

 例如:求1~100的和。

 方法A:

 int I,j;for(I=l;I<=100;I++){j+=I;}

 方法B:

 int I:

 I=(100*(1+100))/2;方法A循环了100次,最少用了100个赋值,100次判断,200个加法(I和j);方法B仅仅用了1次加法,1次乘法和1次除法。

    三、多使用位操作
    在计算机程序中,位是可以操作的最小数据单位,从理论上讲可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件或者做数据交换使用,但是灵活的位操作也可以有效地提高程序运行的效率。举例如下:

 方法A:
  int I,j;I=257/8;j=456%32;

    方法B:
  int I,j;I=257》3;j=456-(456》4《4);从程序上看好像方法B比方法A麻烦。但是,仔细查看产生的汇编代码就会明白,方法A调用了基本的取模函数和除法函数,既有函数调用,还有很多汇编代码和寄存器参与运算;而方法B则仅仅是几句相关的汇编,代码更简洁,效率更高。

 四、嵌入汇编
    举例如下:将数组1赋值给数组2,要求每一字节都相符。

 char stringl[1024],string2[1024];方法A:

 int I;for(I=0;I<1024;I++)*(string2+I)=*(stringl+I);方法B:

 #ifdef_PC_int I:

 for(I=0;I<1024;1++)*(string2+I)=*(slringl+I);#else#ifdef_ARM__asm{  mov R0,stringlmov R1.string2mov R2,#OLOOP:

 LDMIA RO!,[R3-R11]

 STMIA R1![R3-R11]

 ADD R2,R2,#8CMP R2,#400BNE LOOP}

 #endif方法A是最常见的,使用了1024次循环;方法B则根据平台做了区分,在ARM平台下,用嵌入汇编仅128次循环就完成了同样的操作。有人会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为O的字节,这样,标准库函数会提前结束而不能完成要求的操作。这个例程的典型应用是数据的拷贝过程。根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率。


相关文章