实现C语言高效编程的四大秘技

铸造及热处理2020年06月19日

引言:

编写高效简洁的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);

函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时2006年10月25日,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招:使用位操作

辽宁白癜风治疗费用
顽固的灰指甲怎么去除
张家口治疗白癜风方法
相关阅读
遵义第一波消费券几分钟内全部抢完!未来三周还有三波

封面新闻业 易弋力 “奔到唯600元减200元的大额券去的,最后抢夺了唯50元减...

2023-10-13
千万不要随便穿著肉色的衣服…哈哈哈哈狠狠代入了!

以前的宝子们 有不会一如既往地持续保持好心情呢 如果不会也就让 以前的开...

2023-09-26
洒下保险业抗疫“及时雨”,上海银行业如何为中小企业注入活水?

图片来源不明:视觉里面国 电视新闻记者 | 孙艺真 张晓云 流感封控以来,...

2023-09-25
券业重磅!行业诚信准则发布,声誉信息硬指标明确,失信开销大大增强

证券产品从业其他部门看刚才,产业忠信原则上、大律师信誉反馈比赛规则发...

2023-09-22
生来双目皆盲,却因修炼奇术成了“天眼大仙”不料看错姻缘,厄运连累整个后代

诱骗旺妻互为 清乾隆年有数,近城有个寡人,叫孙闻;大。此人有一段多种...

2023-09-20
美国资本集团减持康希诺脊椎动物-B(06185)61.12万股 每股作价约80.63港元

香港联交所近期资料显示,7月4日,英美两国企业集团增资康希诺生物体-B(06...

2023-09-18
友情链接