zoukankan      html  css  js  c++  java
  • C++常用代码优化策略

    1.不存在指向空值的引用,意味着引用比指针的效率更高,因为在使用引用之前不需要测试它的合法性;指针可以被重新赋值以指向另一个不同的对象,但是引用总是指向它初始化时指定的对象。

    2.使用位运算代替加减乘除取余等计算。

    3.用switch代替多层if else,看汇编代码可知,switch有点空间换时间的意思。如果switch不可行,则将最常见的场景放在if分支链的最前面。

    4.减少函数调用,函数调用需要两次跳转,外加栈内存操作。

    5.使用内联函数处理代码量小的函数来消除函数调用开销,空间换时间,实际工作中,如果代码量不是很大,我一般都会使用强制内联的方式  __attribute__((always_inline))。

    6.防止浅拷贝,例如有一个Simple的类,最好把Simple(),Simple(const Simple&), Simple& operator=(const Simple&)声明为私有,或者继承boost的noncopyable库,class Simple : public boost::noncopyable{}。

    7.减少临时对象的使用。

    8.a+=b的形式效率会高于a=a+b,所以使用时首先考虑使用+= 、 -= *= 和 /=,而不是使用+ 、 、 、 /。

    9.在cache级别进行优化(例如使一个结构正好充满一个cache行,增加命中率等,此处内容较多,以后有机会再具体分析)。

    10.如果可能,对象尽量放在栈上,不要放在堆上,即初始化的时候使用A  a(变量1,变量2,...),而不是A  a = new(变量1,变量2,...)。

    11.尽量使用初始化列表进行初始化工作,例如:A::A() : a(0), b(0), c(0) {},而不是初始化函数A::A() { a= b = c = 0; } 。

    12.如果函数并不需要返回值,不要定义。

    13.尽量减少你程序的计算量,例如在草稿纸上简化你的计算式。

    14.不需要的数据,不要去初始化,初始化大块内存,使用memset。

    15.考虑使用profiler和vtune等性能分析工具识别程序中的耗时部分,已准确定位到可以优化的部分。

    16.在for语句循环递增变量的时候,使用++i,而不是后置的i++,因为前者不需要返回一个临时对象.

    17.减少内存的拷贝操作,减少循环和递归的使用,能用指针替换的绝对不拷贝传递整块内存。

    18.vector的clear方法并不能把内存回收,要使用swap来回收内存。

    19.使用stl容器的时候,建立指针的容器而不是对象的容器,因为拷贝指针很快。

    20.函数中传参数的时候,如果是大对象(vector等)尽量传引用。

  • 相关阅读:
    C++ 学习笔记 (七)继承与多态 virtual关键字的使用场景
    C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量
    C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)
    C++ 学习笔记(四)类的内存分配及this指针
    C++ 学习笔记(三)string 类
    C++ 学习笔记(二) const的加强
    C++ 学习笔记(一) cout 与printf 的不同之处
    C++ 学习笔记 开篇
    Kali root用户无法登录GUI界面
    解决方案——Manjaro安装卡在Misc postinstall configurations
  • 原文地址:https://www.cnblogs.com/simplepaul/p/7691839.html
Copyright © 2011-2022 走看看