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),则 ...
随机推荐
- jQuery ajax()使用serialize()提交form数据到后台
1.选中要删除的学生信息 2.点击 删除选中 按钮,把复选框中的值取出提交到后台 3.后台获取选中的id 4.前端也跟着删除数据 示例代码: 前端代码: <!DOCTYPE html> & ...
- SQL Server 缓存清除与内存释放
Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行SqlServer的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰 ...
- visual Studio 中使用正则表达式来进行查找替换
1.打开visual Studio 2. 通过菜单Edit -->Find and Replace -->Replace In File ,或者使用 ctrl + Shift + H ...
- memcache缓存雪崩、缓存无底洞、缓存穿透、永久数据被踢现象
一.缓存雪崩现象 缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降, 缓存中缺失的数据去数据库查询,短时间内造成数据库服务器崩溃, 重启DB短期又被压跨,但新数据的缓存也更新一些,DB反 ...
- LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...
- 新近碰到的病毒(TR.Spy.Babonock.A)
先来段Microsoft的说明: Worm:Win32/Babonock.A Alert level: Severe Detected with Windows Defender Antivirus ...
- Python开发【第二篇】:基本数据类型
运算符 1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 所有对象所具备的方法都保存在类中.对象和类的关系,举个例子:哺乳动物是类:此类下有两个对象,一个为狗.一个为 ...
- java用JDBC连接MySQL数据库的详细知识点
想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...
- Linux最终将会领先于Windows、Mac OS!
Linux最终将会领先于Windows.Mac OS! 众所周知,硬件离开了软件就像人失去灵魂,而操作系统作为软件中的基础部分,更是重中之重!无论手机.电脑.还是服务器一旦离开了操作系统,比之一堆废铁 ...
- 在Ubuntu18.04上使用Anaconda
启动Anaconda Navigator 图形化界面 $ source ~/anaconda3/bin/activate root $ anaconda-navigator 查看目前的conda版本: ...