C++秘籍:C语言高效编程的四大绝招

操作方法

  • 01

    数学方法解决问题 现在我们演绎高效C语言编写的第二招--采用数学方法来解决问题数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高举例如下,求 1~100的和 方法E: int I , j;for (I = 1 ;I<=100; I ++){j += I;} 方法F int I;I = (100 * (1+100)) / 2 这个例子是我印象最深的一个数学用例,是我的计算机启蒙老师考我的当时我只有小学三年级,可惜我当时不知道用公式 N×(N+1)/ 2 来解决这个问题方法E循环了100次才解决问题,也就是说最少用了100个赋值,100个判断,200个加法(I和j);而方法F仅仅用了1个加法,1次乘法,1次除法效果自然不言而喻所以,现在我在编程序的时候,更多的是动脑筋找规律,最大限度地发挥数学的威力来提高程序运行的效率 第三招:使用位操作 实现高效的C语言编写的第三招——使用位操作减少除法和取模的运算在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用"位运算"来完成所有的运算和操作一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率举例如下: 方法G int I,J;I = 257 /8;J = 456 % 32; 方法H int I,J;I = 257 >>3;J = 456 - (456 >> 4 << 4); 在字面上好像H比G麻烦了好多,但是,仔细查看产生的汇编代码就会明白,方法G调用了基本的取模函数和除法函数,既有函数调用,还有很多汇编代码和寄存器参与运算;而方法H则仅仅是几句相关的汇编,代码更简洁,效率更高当然,由于编译器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 来看,效率的差距还是不小相关汇编代码就不在这里列举了 运用这招需要注意的是,因为CPU的不同而产生的问题比如说,在PC上用这招编写的程序,并在PC上调试通过,在移植到一个16位机平台上的时候,可能会产生代码隐患所以只有在一定技术进阶的基础下才可以使用这招 第四招:汇编嵌入 高效C语言编程的必杀技,第四招——嵌入汇编"在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾"这种说法虽然偏激了一些,但是却有它的道理汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法--嵌入汇编,混合编程举例如下,将数组一赋值给数组二,要求每一字节都相符 char string1[1024],string2[1024]; 方法I int I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I) 方法J #ifdef _PC_int I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I);#else#ifdef _ARM___asm{MOV R0,string1MOV R1,string2MOV R2,#0loop:LDMIA R0!, [R3-R11]STMIA R1!, [R3-R11]ADD R2,R2,#8CMP R2, #400BNE loop}#endif 方法I是最常见的方法,使用了1024次循环;方法J则根据平台不同做了区分,在ARM平台下,用嵌入汇编仅用128次循环就完成了同样的操作这里有朋友会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为0的字节,这样的话,标准库函数会提前结束而不会完成我们要求的操作这个例程典型应用于LCD数据的拷贝过程根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率 虽然是必杀技,但是如果轻易使用会付出惨重的代价这是因为,使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,卧虎藏龙,险象环生!同时该招数也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用 <="" p=""> 现在我们演绎高效C语言编写的第二招--采用数学方法来解决问题数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高举例如下,求 1~100的和 方法E: int I , j;for (I = 1 ;I<=100; I ++){j += I;} 方法F int I;I = (100 * (1+100)) / 2 这个例子是我印象最深的一个数学用例,是我的计算机启蒙老师考我的当时我只有小学三年级,可惜我当时不知道用公式 N×(N+1)/ 2 来解决这个问题方法E循环了100次才解决问题,也就是说最少用了100个赋值,100个判断,200个加法(I和j);而方法F仅仅用了1个加法,1次乘法,1次除法效果自然不言而喻所以,现在我在编程序的时候,更多的是动脑筋找规律,最大限度地发挥数学的威力来提高程序运行的效率 第三招:使用位操作 实现高效的C语言编写的第三招——使用位操作减少除法和取模的运算在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用"位运算"来完成所有的运算和操作一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率举例如下: 方法G int I,J;I = 257 /8;J = 456 % 32; 方法H int I,J;I = 257 >>3;J = 456 - (456 >> 4 << 4); 在字面上好像H比G麻烦了好多,但是,仔细查看产生的汇编代码就会明白,方法G调用了基本的取模函数和除法函数,既有函数调用,还有很多汇编代码和寄存器参与运算;而方法H则仅仅是几句相关的汇编,代码更简洁,效率更高当然,由于编译器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 来看,效率的差距还是不小相关汇编代码就不在这里列举了 运用这招需要注意的是,因为CPU的不同而产生的问题比如说,在PC上用这招编写的程序,并在PC上调试通过,在移植到一个16位机平台上的时候,可能会产生代码隐患所以只有在一定技术进阶的基础下才可以使用这招 第四招:汇编嵌入 高效C语言编程的必杀技,第四招——嵌入汇编"在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾"这种说法虽然偏激了一些,但是却有它的道理汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法--嵌入汇编,混合编程举例如下,将数组一赋值给数组二,要求每一字节都相符 char string1[1024],string2[1024]; 方法I int I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I) 方法J #ifdef _PC_int I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I);#else#ifdef _ARM___asm{MOV R0,string1MOV R1,string2MOV R2,#0loop:LDMIA R0!, [R3-R11]STMIA R1!, [R3-R11]ADD R2,R2,#8CMP R2, #400BNE loop}#endif 方法I是最常见的方法,使用了1024次循环;方法J则根据平台不同做了区分,在ARM平台下,用嵌入汇编仅用128次循环就完成了同样的操作这里有朋友会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为0的字节,这样的话,标准库函数会提前结束而不会完成我们要求的操作这个例程典型应用于LCD数据的拷贝过程根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率 虽然是必杀技,但是如果轻易使用会付出惨重的代价这是因为,使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,卧虎藏龙,险象环生!同时该招数也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用。以上内容均出自上嵌编辑发布、转载需告知。

(0)

相关推荐

  • swift语言开发用什么软件?swift语言开发编程环境搭建教程详情

    swift语言开发用什么软件呢?自从苹果wwdc2014大会上推出swift语言之后,程序猿们就开始转战开发苹果软件;但是swift语言开发编程环境怎么搭建呢?我们一起来了解一下,希望可以对大家有所帮 ...

  • 学习编程的四大基本原则

    所有好的学习方法万变不离其宗,都要遵循以下四大基本原则: 操作方法 01 坚持.首先要有毅力,对编程的热爱也可以在一定程序上起到帮助. 02 实践.当你学到了一种新的技术或知识时,多实践是巩固学习的一 ...

  • C语言多线程编程

    在一个程序中,这些独立运行的程序片断叫作"线程"(Thread),利用它编程的概念就叫作"多线程处理".本将介绍c语言如何开启线程. 操作方法 01 引入头文件 ...

  • 十七个C语言新手编程时常犯的错误及解决方式

    C编译的程序对语法检查并不像其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知 ...

  • 买笔记本不被宰的四大绝招

    泡泡网笔记本电脑频道10月8日 为了准确的查明病情,传统中医讲究“望、闻、问、切”的诊断方式。这告诉我们应该从多方面出发客观详尽的了解事物。其实购买笔记本时我们也可以试试采用类似的手段来解决问题,今天 ...

  • 小米手机解锁四大绝招,忘记锁屏密码?

    随着手机智能化.便利化.普及化,手机安全也越来越严峻,越来越引起人们的重视,给手机设置密码已成为常态.有的密码尤其复杂,极易忘记,手机解锁也就相对困难.掌握以下方法,关键时候能够助你轻松解锁. 锁屏解 ...

  • 如何用C语言程序为单片机编程

    很多人都不知道怎么为期望的单片机进行C语言编程,实际上用C语言为单片机编程关键在C语言所使用的编译器编译器上,将C语言的编译器切换会目标单片机所有的编译器即可使用C语言进行编程,前提是所使用的程序指令 ...

  • 习语言是什么有什么用与C语言的关系?

    习语言是什么呢?习语言有什么用呢?许多童鞋都只听说过c语言却不知道习语言,下面小编带你一起来了解一下习语言是什么。 习语言是什么: 习语言即中文版的C语言,由一套完备的编程语法和相配套的工具组成,旨在 ...

  • 习语言是什么?

    习语言是什么: 习语言即中文版的C语言,由一套完备的编程语法和相配套的工具组成,旨在将计算机及软件编程大众化,普及化,中文化,提高程序的维护性而诞生。适合国人使用,尤其适合作为初学者的入门学习工具。 ...