小细节大问题——程序的效率 - winnie的专栏 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/05/01 20:22:20
小细节大问题——程序的效率 收藏
能写出稳定高效的程序一直是程序员所追求的,今天就和大家一起探讨一下关于C++程序优化的几点 由于C/C++语言的复杂性,致使C++编译器隐藏了层层幔布,我们不经意的一条语句都可能是编译器幕后几经周折的结果,在要求程序高效运行的环境下,每一条语句都会让我们慎之又慎,而程序优化又是个十分广泛的话题,包括程序架构设计的优化,语言本身的优化,编程技巧和策略等等,如此大的范围非我能力所及,这里谈的优化就是在实际开发中遇到的问题。 一. 举手之劳的小差别 既然说优化就一定要仔细,不放过任何微小的细节,先看个小例子 1. int a, i = 5; a = i>>1; (1) i = 5; a = i/2; (2) 语句(1)和语句(2)都是将i的数值除2取整,但实现方式却存在较大的差别。 (1) a = i>>1 相当于 sar eax, 1 //算术右移一位 (2) a = i/2 相当于 cdq //将EDX所有值设置为EAX高位的值 sub eax, edx sar eax, 1 可以看到语句(2)完成同样功能却比语句(1)多出两条指令。需要注意的是,当被除数i是正数时,两者数值相同,因两种写法均向上取整,当i为负数时却不一样,因为语句(2)向上取整,即 i=-5时,语句(2) a=-2而语句(1) a=-3。 正所谓勿以善小而不为,勿以恶小而为之啊,优化是大局观,但也别忽视小问题。 二. 猜猜哪一个更快 写法(1) int a[] = {1, 2, 100, 256}; for(int i=0; i本文来自CSDN博客,转载请标明出处:file:///C:/Documents%20and%20Settings/Administrator/桌面/网文/小细节大问题——程序的效率%20-%20winnie的专栏%20-%20CSDN博客.mht
能写出稳定高效的程序一直是程序员所追求的,今天就和大家一起探讨一下关于C++程序优化的几点 由于C/C++语言的复杂性,致使C++编译器隐藏了层层幔布,我们不经意的一条语句都可能是编译器幕后几经周折的结果,在要求程序高效运行的环境下,每一条语句都会让我们慎之又慎,而程序优化又是个十分广泛的话题,包括程序架构设计的优化,语言本身的优化,编程技巧和策略等等,如此大的范围非我能力所及,这里谈的优化就是在实际开发中遇到的问题。 一. 举手之劳的小差别 既然说优化就一定要仔细,不放过任何微小的细节,先看个小例子 1. int a, i = 5; a = i>>1; (1) i = 5; a = i/2; (2) 语句(1)和语句(2)都是将i的数值除2取整,但实现方式却存在较大的差别。 (1) a = i>>1 相当于 sar eax, 1 //算术右移一位 (2) a = i/2 相当于 cdq //将EDX所有值设置为EAX高位的值 sub eax, edx sar eax, 1 可以看到语句(2)完成同样功能却比语句(1)多出两条指令。需要注意的是,当被除数i是正数时,两者数值相同,因两种写法均向上取整,当i为负数时却不一样,因为语句(2)向上取整,即 i=-5时,语句(2) a=-2而语句(1) a=-3。 正所谓勿以善小而不为,勿以恶小而为之啊,优化是大局观,但也别忽视小问题。 二. 猜猜哪一个更快 写法(1) int a[] = {1, 2, 100, 256}; for(int i=0; i
小细节大问题——程序的效率 - winnie的专栏 - CSDN博客
OOP面向对象编程——C++ - winnie的专栏 - CSDN博客
几种Linux 的开关机状态解析 - winnie的专栏 - CSDN博客
Linux/Unix环境下的make命令详解 - winnie的专栏 - CSDN博客
程序为什么要模块化 - dadalan的专栏 - CSDN博客
VC++ 安装程序制作 - zhongyhc的专栏 - CSDN博客
诗律表——五绝 - yanwenyuan0102的专栏 - CSDN博客
baozhengw的专栏 - CSDN博客
设计自动升级软件 - 小肖的专栏 - CSDN博客
调试游戏程序的学问 - 水上漂的专栏 - CSDN博客
一个C++程序编译失败引发的思考 - feellin的专栏 - CSDN博客
如何从程序集中加载及卸载插件 - BearTang的专栏 - CSDN博客
程序员,当你写程序写累了怎么办。 - 王福朋的专栏 - CSDN博客
在基于对话框程序中使用WM_KICKIDLE消息 - ruo_gu的专栏 - CSDN博客
用C++写Java Style程序 - 薛笛的专栏 - CSDN博客
AGPS简介 - kv110的专栏 - CSDN博客
OpenMAX简介 - shenbin1430的专栏 - CSDN博客
Android flinger - simmer_ken的专栏 - CSDN博客
windows 命令 - orangeman1982112的专栏 - CSDN博客
JNDI概述 - tanghongru1983的专栏 - CSDN博客
指针 - syhhl007的专栏 - CSDN博客
变量命名 - yszwn的专栏 - CSDN博客
什么是PLL - JasonCao的专栏 - CSDN博客
VC积累 - cherryt的专栏 - CSDN博客