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

  • 相关阅读:
    [react002] component基本用法
    [react001] 使用webpack自动构建react 项目
    [Elixir009]像GenServer一样用behaviour来规范接口
    [Elixir008]Nested Module里的动态函数调用方式
    [Elixir007] on_definition规范函数定义时的各种潜规则
    [Elixir006]CSV(Comma-separated values)处理
    [Elixir005] 查看指定数据的详细信息 i helper
    [Elixir004]通过环境变量(Environment Variables)来管理config
    [Elixir003] Mix Archives
    [Elixir002]节点启动后自动连接其它节点
  • 原文地址:https://www.cnblogs.com/onwalking/p/3639635.html
Copyright © 2011-2022 走看看