- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言高效编程的几招
编写高效简洁的C 语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方
请
各位指教。
第1 招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决
问题
的第1 招--以空间换时间。例如:字符串的赋值。
方法A,通常的办法:
#define LEN 32
char string1 [LEN]; memset (string1,0,LEN);
strcpy (string1,This is an example!!
方法B:
const char string2[LEN]=This is an example! char*cp;
cp=string2;
(使用的时候可以直接用指针来操作。)
从上面的例子可以看出,A 和B 的效率是不能比的。在同样的存储空
间下,B 直接使用指针就可以操作了,而A 需要调用
两个字符函数才能完成。B 的缺点在于灵活性没有A 好。在需要频繁更改一个字符串内容的时候,A 具有更好的灵活性;
如果采用方法B,则需要预存许多字符串,虽然占用了 大量的内存, 但是获得了程序执行的高效率。
如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。该招数的边招--使用宏函数而不是函数。举例如下:
方法C:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17 int BIT_MASK (int_bf)
{
return ((IU(bw##_bf))-1)(bs##_bf);
}
void SET_BITS(int_dst,int_bf,int_val)
{
_dst=((_dst) ~ (BIT_MASK(_bf)))I\ (((_val)(bs##_bf))(BIT_MASK(_bf)))
} SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumb
er);
方法D:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17 #define bmMCDR2_ADDRESS BIT_MASK (MCDR2_ADDRESS)
#define BIT_MASK(_bf)(((1U(bw##_bf))-1) (bs##_bf)
#define SET_BITS(_dst,_bf,_val)\ ((_dst)=((_dst)~(BIT_MASK(_bf)))I
(((_val)(bs##_bf))(BIT_MASK(_bf)))) SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumb
er);
函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的
栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU 也要
在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU 时间。而宏函数不存在这个问
题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏
函数的时候,该现象尤其突出。
D 方法是我看到的最好的置位操作函数,是ARM 公司源码的一部分,在短短的
三行内实现了很多功能,几乎涵盖了所有
的位操作功能。C 方法是其变体,其中滋味还需大家仔细体会。
:汇编嵌入
高效C 语言编程的必杀技,第四招--嵌入汇编。“在熟悉汇编语言的人眼里,C 语言编写的程序都是垃圾”。这种说法虽然偏激了一些,但是却有它的道理。汇编语言是效
率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方
法--嵌入汇编、混合编程。
举例如下,将数组一赋值给数组二,要求每一个字节都相符。char string1[1024], string2[1024];
用变量a 给出下面的定义
一个整型数(An integer)
一个指向整型数的指针( A pointer to an integer)
一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
一个有10 个整型数的数组( An array of 10 integers)
一个有10 个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
一个指向有10 个整型数数组的指针( A pointer to
您可能关注的文档
最近下载
- 部编版五年级语文上册期末测试卷(共五套)【含答案】.pdf VIP
- 《医学检验学》课件.ppt VIP
- 河南省嵩县凡台沟-武松川金矿矿产资源开采与生态修复方案 .pdf VIP
- 初高中物理学习中思维方法比较.ppt VIP
- 上交叉综合征的肌肉失衡及处理ppt课件.pptx VIP
- (新课标)新外研版中职(英语基础模块2)Unit 7 Inventions Make Life Better《Listening and Speaking》说课稿.doc VIP
- 大学生心理健康知到课后答案智慧树章节测试答案2025年春上海交通大学、北京师范大学、清华大学、吉林大学、中国人民大学、北京航空航天大学、北京理工大学、东北大学、南京大学、华中科技大学、中山大学、电子科技大学.docx VIP
- 五年级青春期教育主题班会课.pptx VIP
- 塑料制品厂供配电毕业设计.doc VIP
- 米家米家洗衣机 | 智投洗 滚筒10kg使用说明书.pdf
原创力文档


文档评论(0)