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++常用代码优化策略的更多相关文章

  1. JAVA记录-java代码优化策略

    java代码优化策略 1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int ...

  2. .Net中的并行编程-6.常用优化策略

                本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略.      一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...

  3. Java代码优化策略

    1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int i=0; i<v ...

  4. Redis的常用淘汰策略以及算法实现

    一.Redis的内存配置 1,Redis配置内存为多少合适? 默认:如果不设置最大内存大小或者设置最大内存大小为0,在64为操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存. 极限情况: ...

  5. Unity手游之路<十三>手游代码更新策略探讨

    http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...

  6. 强化学习(十三) 策略梯度(Policy Gradient)

    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...

  7. HBase篇--HBase常用优化

    一.前述 HBase优化能够让我们对调优有一定的理解,当然企业并不是所有的优化全都用,优化还要根据业务具体实施. 二.具体优化 1.表的设计  1.1 预分区 默认情况下,在创建HBase表的时候会自 ...

  8. Redis数据过期策略详解

    http://www.cnblogs.com/xuliangxing/p/7151812.html 本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用 ...

  9. 2.Magicodes.NET框架之路——策略管理

    闲话策略 策略,有很多解释.但鄙人个人比较看重这点: 策略,是为了实现某个目标或者针对某些问题而制定的应对方案,以最终实现目标.比如为实现生娃而XXOO. 因此在本框架中,策略(Strategy),则 ...

随机推荐

  1. 自动化测试基础篇--Selenium文件上传send_keys

    摘自https://www.cnblogs.com/sanzangTst/p/8358165.html 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一 ...

  2. python3基础知识梳理

    一.数据类型 1.数字 int(整型) long(长整型) float(浮点型) complex(复数) 2.布尔值 True或False 3.字符串   二.变量 变量命名规则: 变量名只能是 字母 ...

  3. [转]JIRA 7.2.6与Confluence 6.0.3的安装与配置之MS SQL Server版

    相关软件版本信息 说明:下方软件可以点击链接,通过百度云盘进行下载. 操作系统:Windows 10(密码:foht)或者Windows Server 2012(密码:lsad): 数据库:SQL S ...

  4. Python: 遍历

    ======================遍历列表========================# 直接遍历list: for elem in list: pass # 通过索引获取 for i ...

  5. 【PAT】B1010 一元多项式求导

    这道题的用例中没有负数 在输入时就进行结果的计算,忽略常数项, 顺序输出 #include<cstdio> #include<vector> using namespace s ...

  6. May 31. 2018 Week 22nd Thursday

    The good seaman is known in bad weather. 惊涛骇浪,方显英雄本色. As we all know, the true worth of a person is ...

  7. Servlet中的request与response

    了解这方面的知识可以查看以下博客 https://www.cnblogs.com/zhangyinhua/p/7629221.html https://www.cnblogs.com/zhaojian ...

  8. MonkeyRunner测试工具小结

    一.MonkeyRunner介绍: MonkeyRunner是Google提供的一个基于坐标点的Android黑盒自动化测试工具.Monkeyrunner工具提供了一套API让用户/测试人员来调用,调 ...

  9. 《Java大学教程》—第23章 Java网络编程

    本章主要关注的是Java的几个应用网络编程的场景,对于网络编程没有太多深入介绍,而Java本来也没有多少针对网络编程的特性.虽然Java有个Applet的概念,但是真用这个的开发的场景其实不多. 23 ...

  10. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...