- 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语言
引 言:
编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。
第1招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招——以空间换时间。
例如:字符串的赋值。
方法A,通常的办法:
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,“This is a example!!”);
方法B:
const char string2[LEN] =“This is a 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 ((1U (bw ## __bf)) - 1) (bs ## __bf);
}
void SET_BITS(int __dst, int __bf, int __val)
{
__dst = ((__dst) ~(BIT_MASK(__bf))) |
(((__val) (bs ## __bf)) (BIT_MASK(__bf))))
}
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
方法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))) |
(((__val) (bs ## __bf)) (BIT_MASK(__bf))))
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。
D方法是我看到的最好的置位操作函数,是ARM公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。
第2招:数学方法解决问题
现在我们演绎高效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次除法。效果自然不言而喻。所以,现在我在编程序的时候,更多的是动脑筋找规律,最大限度地发挥数学的威力来提高程序运行的效率。
第3招:使用位操作
实现高效的C语言编写的第三招——使用位操
您可能关注的文档
- 多看说明书.doc
- 多线程文件读写操作.doc
- 多肉植物浇水参考表.doc
- 多载波策略脚本.doc
- 多项式之和.doc
- 多项式求和(模板).doc
- 夜场礼貌.doc
- 夜店里常放的歌曲.doc
- 夜店音乐歌名.doc
- 够级攻略.doc
- 2026年新疆轻工职业技术学院单招(计算机)测试备考题库及答案1套.docx
- 2026年新疆轻工职业技术学院单招(计算机)测试备考题库附答案.docx
- 2026年新疆轻工职业技术学院单招(计算机)考试参考题库附答案.docx
- 2026年晋中师范高等专科学校单招(计算机)测试备考题库最新.docx
- 2026年明达职业技术学院单招(计算机)测试备考题库推荐.docx
- 2026年无锡商业职业技术学院单招(计算机)考试备考题库附答案.docx
- 2025青海海东民和县招聘社区工作者17人备考题库有完整答案详解.docx
- 2026年无锡城市职业技术学院单招(计算机)测试模拟题库推荐.docx
- 2026年新疆轻工职业技术学院单招(计算机)测试模拟题库必考题.docx
- 2026年新疆铁道职业技术学院单招(计算机)测试备考题库及答案1套.docx
最近下载
- 如何获取乳内动脉教案.ppt VIP
- Unit5 Fun Clubs Section A Grammar Focus课件 人教版(2024)七年级英语上册.pptx VIP
- 【宏观专题】黄金的“非寻常”定价-240531.pdf VIP
- 海外业务培训.pptx VIP
- 住建部GB 55038-2025《住宅项目规范》核心要点解读.pptx VIP
- 项目在招标、评标、定标过程中存在倾向性和不公平性的质疑函.doc
- IND231校秤过程与检修.pdf
- SJ-20527A-2003 微波组件总规范.pdf VIP
- 培训课件--妊娠剧吐查房.ppt VIP
- GJ B 8481-2015 微波组件通用规范.pdf VIP
原创力文档


文档评论(0)