查看: 3568|回复: 9

优化C代码常用的几招

[复制链接]

该用户从未签到

发表于 2007-7-31 22:51:03 | 显示全部楼层 |阅读模式
分享到:
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。

第一招:以空间换时间

  计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第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,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。

如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。

第二招: 使用宏而不是函数。

  这也是第一招的变招。函数和宏的区别就在于,宏占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。而宏不存在这个问题。宏仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏的时候,该现象尤其突出。

举例如下:

方法C:

#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
int BIT_MASK(int __bf)
{
 return ((1U 
回复

使用道具 举报

该用户从未签到

发表于 2007-9-1 14:05:43 | 显示全部楼层

RE:优化C代码常用的几招

楼主好文啊!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2007-9-1 19:05:49 | 显示全部楼层

RE:优化C代码常用的几招

呵呵  受教了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2007-9-15 00:34:34 | 显示全部楼层

RE:优化C代码常用的几招

主高人啊,学习学习
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2007-9-22 09:49:17 | 显示全部楼层

RE:优化C代码常用的几招

回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2007-12-14 16:45:12 | 显示全部楼层

RE:优化C代码常用的几招

有道理,学习了。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-2-15 14:17:46 | 显示全部楼层

RE:优化C代码常用的几招

呵呵 受教了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-2-27 15:02:50 | 显示全部楼层

RE:優化C代碼常用的幾招

來看看...應該不錯
感謝作者提供這麼好的資訊
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-5-20 16:37:45 | 显示全部楼层

RE:优化C代码常用的几招

回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-3-6 13:00:32 | 显示全部楼层

RE:优化C代码常用的几招

呵呵 受教了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条



手机版|小黑屋|与非网

GMT+8, 2025-1-9 06:07 , Processed in 0.198560 second(s), 33 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.