首页
社区
课程
招聘
关于VC下 Win32程序的速度优化有什么好建议吗?
2006-6-30 14:46 6021

关于VC下 Win32程序的速度优化有什么好建议吗?

2006-6-30 14:46
6021
当今程序动辄几十兆,而且效率极低(尤其是在java之流出现之后更甚),完全依赖用户CPU等硬件的不断升级来应对。

可是作为一个好的程序,怎能不考虑执行的效率呢?

瞬间执行完毕总会让用户减少无尽的等待烦恼和困惑,同时也会提高用户对软件的认同和评价。

我有的程序有时运行效率不高;我很苦恼。为此,我在必要的地方使用了多线程的方法,效果很明显。

但并不是什么都能用多线程来解决的。

如果一个单一的流水似处理,可能有循环、判断、数组、指针,那么通常有什么办法来提高运行效率呢?我的意思是说,程序的流程结构已经最优化到不能再改变了(这一点我还是有点自信)。那么如何从实现的角度对速度进行最优化的开发呢?

望高手们指教指教!!!!!!!不胜感激!!!!!!!!!!!!!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2006-6-30 15:53
2
0
推荐一个很简单的方案 用Inter C++ 9.1编译器  并选择循环展开
会发现程序体积大了很多 但是速度也快了不少 特别是选择了SSE3
流水线优化的情况下:)
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 1 2006-6-30 21:45
3
0
程序运行速度慢多在于自己的程序某些地方设计的不好,不要一味依赖编译器.
该用list的地方用vector,可用折半查找或hash查找的地方就不要用顺序查找,否则用汇编写的也一样慢.
另外,有句名言是程序运行80%的时间都在20%的代码上,所以优化关键点,尤其是循环内部非常有效.
雪    币: 235
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lemony 1 2006-7-3 04:05
4
0
良好的设计的思路才是王道。。。。。。

后期优化已经是亡羊补牢了
雪    币: 112
活跃值: (48)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
kenmark 2 2006-7-4 16:29
5
0
由于如今得设计思路都是复用复用再复用还有TEMPLATE技术得应用,你不觉的TEMPLATE一展开耗费得空间有多大吗???OO对内存得耗费也不小还有就是编译器也是,没有办法的,一个空的C++程序再DEVCPP4.9.92下编译有N百K真个要死,总之尽量少用TEMPLATE技术,比较有效的就这么一个了吧,我想不出来了!
雪    币: 201
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wzzw 2006-8-7 18:29
6
0
最初由 foxabu 发布
推荐一个很简单的方案 用Inter C++ 9.1编译器 并选择循环展开
会发现程序体积大了很多 但是速度也快了不少 特别是选择了SSE3
流水线优化的情况下:)


如果用的是AMD的CPU这个方法还行吗?
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
monkeycz 11 2006-8-7 23:33
7
0
用VTune吧,看看把时间都浪费在哪些无谓的操作上了
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-9 11:51
8
0
主要方面:
首先是改进算法,用复杂度小的算法。这个最重要。
以空间换时间还是以时间换空间,或者维持在时间和空间复杂度的一个balance。都是设计算法时候需要考虑的问题。

次要方面:
Frankly speaking,C的速度(不包括C++)已经和汇编没有什么差别了。从代码来说上如果你不是汇编高手(比如像我),或许还是C语言经过优化编译后翻译成的汇编效率高。
ps: Intel C(++)的优化也很彻底。
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2006-8-9 14:23
9
0
我刚学VC,学习中......
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
byewithcoo 2006-8-11 23:11
10
0
到目前为止,我读过的书中,Kris Kaspersky写的《代码优化:有效使用内存》最为出色,虽然题名为内存优化,当却从CPU的角度阐述了底层细节运作的方方面面,最后把重点放在程序热点问题上详细研究。编译原理方面的书也在高级语言级别作了说明。

流水线作业:

     我打这些字之前有人说使用优化工具Inter C++ 9.1编译器并选择循环展开编译程序,其实说白了就是将代码改造成CPU流水线工作原理的代码。从我们到电脑城买电脑老板说CPU是几级流水线到大学课堂上计算机组成原理中流水线原理的授业,都说明它在现实编程中的重要性。虽然流水线原理在硬件层次为理想的代码提供了N倍速度的提升,但一般而言,我们直接写出的代码符合这个流水线原理标准的不多见。下面就示例一个符合普通cup四季流水线算法,它将是我们初学入门语言速度的四倍左右。从1加到100:
int i, nResult = 0;
for (i = 1; i < 101; i = i + 4)
{
  nResult += i;
  nResult += i + 1;
  nResult += i + 2;
  nResult += i + 3;
}

寄存器:
   其实在C++中有个变量属性是register,若是以此属性申明变量则它的存储载体将会是CPU中的寄存器,它的处理速度将是最快的。一般从编程的角度来说,存在四种存储载体,虚拟内存、内存、CACHE、CPU寄存器,CACHE我们无法获知,处理的速度由慢而快,每个级别的差距将是指数级的。因此如何安排显得尤为重要。在c语言中我们仔细的话会发现变量定义必须集中在程序的入口处,C++中则随时定义和使用,C++给了我们灵活,却让我们丧失了效率。我们使用的计算机体系结构是冯诺.依曼体系结构,即数据和代码独立存储的结构,在高级代码转化成机器代码编译器将会为我们组织成这种形式,相对而言的哈佛结构则可以随处申明。典型的表现就我们编写汇编代码这个问题被彻底的揭露出来。所以我们要养成在代码块前面部分集中申明变量和其他对象空间的习惯,以便编译器高效的优化代码。

    好了,说的业差不多了,经常说的热点代码相信大家应该不会忽略优化。更具体的技术可以参看一下专业的书籍。
游客
登录 | 注册 方可回帖
返回