能力值:
( LV13,RANK:530 )
2 楼
推荐一个很简单的方案 用Inter C++ 9.1编译器 并选择循环展开
会发现程序体积大了很多 但是速度也快了不少 特别是选择了SSE3
流水线优化的情况下:)
能力值:
( LV4,RANK:50 )
3 楼
程序运行速度慢多在于自己的程序某些地方设计的不好,不要一味依赖编译器.
该用list的地方用vector,可用折半查找或hash查找的地方就不要用顺序查找,否则用汇编写的也一样慢.
另外,有句名言是程序运行80%的时间都在20%的代码上,所以优化关键点,尤其是循环内部非常有效.
能力值:
( LV4,RANK:50 )
4 楼
良好的设计的思路才是王道。。。。。。
后期优化已经是亡羊补牢了
能力值:
( LV7,RANK:100 )
5 楼
由于如今得设计思路都是复用复用再复用还有TEMPLATE技术得应用,你不觉的TEMPLATE一展开耗费得空间有多大吗???OO对内存得耗费也不小还有就是编译器也是,没有办法的,一个空的C++程序再DEVCPP4.9.92下编译有N百K真个要死,总之尽量少用TEMPLATE技术,比较有效的就这么一个了吧,我想不出来了!
能力值:
( LV2,RANK:10 )
6 楼
最初由 foxabu 发布 推荐一个很简单的方案 用Inter C++ 9.1编译器 并选择循环展开 会发现程序体积大了很多 但是速度也快了不少 特别是选择了SSE3 流水线优化的情况下:)
如果用的是AMD的CPU这个方法还行吗?
能力值:
(RANK:460 )
7 楼
用VTune吧,看看把时间都浪费在哪些无谓的操作上了
能力值:
( LV12,RANK:250 )
8 楼
主要方面:
首先是改进算法,用复杂度小的算法。这个最重要。
以空间换时间还是以时间换空间,或者维持在时间和空间复杂度的一个balance。都是设计算法时候需要考虑的问题。
次要方面:
Frankly speaking,C的速度(不包括C++)已经和汇编没有什么差别了。从代码来说上如果你不是汇编高手(比如像我),或许还是C语言经过优化编译后翻译成的汇编效率高。
ps: Intel C(++)的优化也很彻底。
能力值:
( LV9,RANK:780 )
9 楼
我刚学VC,学习中......
能力值:
( LV2,RANK:10 )
10 楼
到目前为止,我读过的书中,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++给了我们灵活,却让我们丧失了效率。我们使用的计算机体系结构是冯诺.依曼体系结构,即数据和代码独立存储的结构,在高级代码转化成机器代码编译器将会为我们组织成这种形式,相对而言的哈佛结构则可以随处申明。典型的表现就我们编写汇编代码这个问题被彻底的揭露出来。所以我们要养成在代码块前面部分集中申明变量和其他对象空间的习惯,以便编译器高效的优化代码。
好了,说的业差不多了,经常说的热点代码相信大家应该不会忽略优化。更具体的技术可以参看一下专业的书籍。