初涉优化

来源:互联网 发布:淘宝去同款软件 编辑:程序博客网 时间:2024/05/01 22:14

谈到优化的问题,首先要明白C++的特性带来多大的性能开销、生成程序的瓶颈在哪个部分,然后采取针对性的措施。有时,在程序还没有得到优化、真正地满足需要之前,我们还不能松一口气,对自己说“Code Complete!”

分别简单地回顾一下:

1,C++对象模型

程序使用内存区、全局/静态存储区及常量数据区、堆和栈、C++中的对象

对象的生命周期、内存布局、构造与析构的调用

2,C++语言特性的性能分析

继承和虚函数:它们带来的开销,以及如何在必要的时候采取替代方案[1]

临时对象

内联函数

3,常用数据结构的性能分析

遍历、排序、查找、删除、插入:这些内容在稍微深入一点的C++书籍中,往往会有介绍。

动态数组的实现及分析:我想这部分除了明白原理以外,还需要在实际环境中进行实验了。

4,操作系统的内存管理

windows内存管理:虚拟内存、访问虚拟内存时的处理流程、地址映射、进程工作集[2]。

linux内存管理:同windows,当然,也需要测试。

5,动态内存管理

new、delete、内存泄露、智能指针

6,内存池[3]

原理示例、实现示例[4]。

7,动态链接库与动态库

windows DLL、linux DSO[5]

8,程序启动过程

windows、linux程序启动过程原理[6]

影响程序启动性能的因素:源代码、动态链接库、配置文件/资源文件因素

9,程序启动性能优化

10,内存分析工具IBM Rational Purify

11,性能分析工具IBM Rational Quantify

12,实时IO检测工具FileMon

 

[1] 回忆MFC框架的实现——用函数指针表代替虚函数。

[2] 在这方面,yathing使用得还比较少,不够深入,所以不清楚到底这类操作有多么耗时——需要实际测试。

[3] “池”的概念,不仅仅用在内存管理中,类似的还有数据库连接池、网络访问连接池等等。当创建、销毁一个object非常频繁的时候,我们就应该考虑通过“池”的“重利用”特性,减少开销了。

[4] 实现“池”机制,究竟能够多大地提高程序的性能呢?这不仅有趣,而且有实践指导意义。值得详细研究呢。

[5] DSO:Dynamic Shared Object

[6] 虽然我们不能修改操作系统的启动过程(MS可不会公开内核源代码呢~.~),这还真是令人沮丧。linux的内核也许会好一点?此外,我们将来可能遇到的还不止这些:J2EE中的容器执行效率、C++中间件的效率......只要存在“先加载后执行”,就会存在瓶颈的问题;广义一点说:只要构成应用程序的部件之间还是“有缝状态”,没有达到“天衣无缝、亲密无间”的情况,我们就会想到“瓶颈”的问题。