• <提高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.对于要求响应延迟最小的程序来说,同步多线程方案要比异步轮询方案好,因为异步方案缺少通知手段。

  • 相关阅读:
    eclispe安装tomcate没有srver解决
    反射常见方法
    让用户输入一个日期字符串,将其转换成日期格式, 格式是(yyyy/MM/dd,yyyyMMdd,yyyy-MM-dd)中的一种, 任何一种转换成功都可以; 如果所有的都无法转换,输出日期格式非法。
    List 接口中ArrayList Vector LinkedList 比较
    抽象类
    js核心知识
    JQgrid学习网站
    小练习---递归求5!
    map()
    小练习---阶乘
  • 原文地址:https://www.cnblogs.com/onwalking/p/3639635.html
Copyright © 2020-2023  润新知