<提高C++性能的编程技术>

一、跟踪实例
1.I/O的开销的高昂的;
2.函数调用的开销是要考虑的一个因素,因此应该将短小的、频繁调用的函数内联;
3.复制对象的开销是高昂的,最好选择传递引用;
4.对象定义会出发隐形地执行构造函数和析构函数。

二、构造函数和析构函数
1.堆内存的分配与释放代价是高昂的;
2.去掉不必要的冗余对象,不管是类中的成员变量还是函数的参数,都会带来不必要的构造和析构开销;
3.有些基类没有成员变量也没有提供接口的作用,这种基类属于无意义的基类,应该去掉;
4.去掉多余的构造开销。

三、虚函数
1.只能在运行期间解析的虚函数调用是不允许使用内联的;
2.模版比继承提供更好的性能,但是编译错误难以调试,同时c++不支持隐式接口。

四、返回值优化(RVO)
1.无新内容。

五、临时对象
1.将构造函数声明为explicit,可以允许编译器在幕后使用类型转换;
2.临时对象会以构造函数和析构函数的形式降低一半的性能;
3.如可能,尽量避免使用对象拷贝;
4.在<op>可能是"+、-、*"或者"/"的地方,使用<op>=运算符可以消除临时对象。

六、单线程内存池
1.暂时忽略。

七、多线程内存池
1.暂时忽略。

八、内联基础
1.暂时忽略。

九、内联-站在性能的角度
1.暂时忽略。

十、内联技巧
1.暂时忽略。

十一、标准模板库
1.无新内容。

十二、引用计数
1.无新内容。

十三、编码优化
1.预先计算;
2.提高常用路径的速度,if (and1 && and2)以及if (or1 || or2)中;
3.缓式计算,将计算延迟到真正需要的时候;
4.体系结构,在经常一起访问两个成员时,最好让他们处于统一缓存行中;
5.编译器优化,在release时开启编译器优化。

十四、设计优化
1.无新内容。

十五、可扩展性
1.在类中定义的时候,锁应该放置在最靠近它所保护的共享数据附近;
2.读写锁会降低性能,但是能提高扩展性;
3.把单一的任务分解为多个并发子任务。

十六、系统体系结构相关话题
1.同步操作的开销往往比异步操作大得多,但异步操作往往需要用轮询来获取结果,根据需要再进行权衡;
2.对于要求响应延迟最小的程序来说,同步多线程方案要比异步轮询方案好,因为异步方案缺少通知手段。

原文地址:https://www.cnblogs.com/onwalking/p/3639635.html