以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 加快程序运行速度的技巧[转] (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=38406) |
-- 作者:zhu_ruixian -- 发布时间:9/28/2006 1:43:00 PM -- 加快程序运行速度的技巧[转] 通常影响程序运行速度的地方,都是在执行次数最多的地方。比如显示一张800*600的256色图形,如果在设置调色板时浪费了0.001秒,那么对整个程序不会有很大影响,因为设置调色板的操作只要作一次就完成,但是每绘出一点要多浪费0.001秒,那么整张图画完就会慢上800*600*0.001秒,这是一个相当可观的数目。下面介绍一些常用的技巧。 一.尽量使用整数,少用浮点数 二.避免乘法与除法 a*2^n-->a<<n 例:a*16-->a<<4 上式中2^n表示2的n次方。 三.少用求模运算 a%2^n --> a&(2^n-1) 注意,如果除数不是2的次方,绝不能用&来替代。 四.复杂的二维计算改用查表法 unsinged table[200]; 那么在绘点时便可以直接使用下面的方法来取得位置: table[y] + x; 避免了乘法运算,这就是“以空间换取时间“的做法。还有一种变形的查表法也值得一提,那就是如果在程序中有很多地方都用到了相同的运算,那么可以事先算出结果并加以储存,例如: ...... 则可先算出size: size = width * height * 3; 五.将耗时的运算移到循环之外 char far *vp = (char far *)0xA0000000L; 可以改成: char far *vp = (char far *)0xA0000000L; 再进一步还可以更上一层楼,将乘法完全移出循环: char far *vp = (char far *)0xA0000000L; 其中offset的值正是矩形中最右边的一点到下一条扫描线最左边一点的差距值。 六.使用寄存器变量 register int i; 七.编译器的设置
|
-- 作者:Krise77 -- 发布时间:10/2/2006 7:13:00 PM -- 懂了,谢谢! |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |