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++常用代码优化策略的更多相关文章
- JAVA记录-java代码优化策略
java代码优化策略 1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int ...
- .Net中的并行编程-6.常用优化策略
本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略. 一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...
- Java代码优化策略
1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int i=0; i<v ...
- Redis的常用淘汰策略以及算法实现
一.Redis的内存配置 1,Redis配置内存为多少合适? 默认:如果不设置最大内存大小或者设置最大内存大小为0,在64为操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存. 极限情况: ...
- Unity手游之路<十三>手游代码更新策略探讨
http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...
- 强化学习(十三) 策略梯度(Policy Gradient)
在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...
- HBase篇--HBase常用优化
一.前述 HBase优化能够让我们对调优有一定的理解,当然企业并不是所有的优化全都用,优化还要根据业务具体实施. 二.具体优化 1.表的设计 1.1 预分区 默认情况下,在创建HBase表的时候会自 ...
- Redis数据过期策略详解
http://www.cnblogs.com/xuliangxing/p/7151812.html 本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用 ...
- 2.Magicodes.NET框架之路——策略管理
闲话策略 策略,有很多解释.但鄙人个人比较看重这点: 策略,是为了实现某个目标或者针对某些问题而制定的应对方案,以最终实现目标.比如为实现生娃而XXOO. 因此在本框架中,策略(Strategy),则 ...
随机推荐
- (转)Debian 安装与卸载包命令
1.APT主要命令apt-cache search ------package 搜索包sudo apt-get install ------package 安装包sudo apt-get remov ...
- Unity Editor 下创建Lua和Text文件
预览 在Project视图中,扩展右键菜单,右键 – Create - Text File 创建一个Text文件,或者Lua文件. 关键点 获取当前选择的路径,以Assets路径开头 var sele ...
- python3+xlwt 读取txt信息并写入到excel中
# coding = utf-8 import os import xlwt import re def readTxt_toExcel(valueList, Pathlist): workbook ...
- 安全之路 —— 使用Windows全局钩子打造键盘记录器
简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...
- Win 10 启用Linux子系统---Kali 和Ubuntu子系统
注:转载请注明出处,谢谢!!! 一.Linux on Windows简介 Win10一周年版推出了用于Windows的Linux子系统这一功能.Linux子系统和Windows的结合真是有一种神互补. ...
- sci-hub免费下载论文
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ sci-hub网址: https://gfsoso.99lb.net/sci-hub.html 免费下载 ...
- c# 反射 去掉对象中字符串属性多余空格
- php面试题整理(五)
表单也得改
- 关于发邮件报错535 Error:authentication failed解决方法
写在最前面 相信看到535报错的同学代码编写方面都没有问题,只是不明白为什么填写了帐号密码后还是报535错误,这里我以163邮箱为例,并使用Python讲解怎么解决535问题 代码如下: import ...
- Xshell安装后,使用的优化
常见的远程连接软件 windows Xshell.secureCRT.Putty mac ssh命令.iterm2 手机 IOS-termius Android-JuiceSSH Xshell的优化 ...