整本书写的有点啰嗦,读下核心要点就好。

转载自:https://www.cnblogs.com/opama/p/6446523.html

这是一本讲C++性能优化的书,我差点以为是effective C++的山寨版~~
书中的主要观点:
1.C语言的源代码与汇编语言之间仍然保持一种线性关系。C++打破了这种线性关系,开销的波动很大。
软件低效的根源:设计效率、编码效率。设计效率包括:算法和数据结构和程序分解。编码效率包括:语言结构、系统体系架构、库、编译器优化。
2.对象的构造和析构容易造成不必要的开销,只在需要时创建对象。I/O开销是昂贵的。引用传递比按值传递高效。内联消除了频繁调用的函数所产生的函数调用开销。
3.对象的创建引发对父对象和成员对象的递归创建(或清除)。要当心复杂层次中对象的组合使用。平衡编码的灵活性和性能,按需选择是编写功能强大的类还是仅仅满足当前所需功能的类,当然前者的开销会较大。
4.虚函数会从以下几个方面造成性能损失:需要维护虚表、通过指针调用、不能内联。无法内联虚函数是虚函数最大的性能损失。比起继承,模板可提供更好的性能,因为其在编译时就确定了类型。
5.临时对象会以构造函数和构析函数的形式损失两倍的性能。通过函数重载可以避免编译器为解决类型不匹配问题而创建临时对象。
6.系统函数提供强大功能的同时也会造成性能开销。如果只在单线程环境使用简单的内存管理工作,那么编写简单的内存管理器比调用系统的库函数划算得多。
7.内联能够减少调用开销。内联更应该是编译器的优化而不是程序员进行的优化。内联的缺点是可能导致带码的膨胀,缓存出错。有些方法不能内联,例如,不能内联递归方法。
8.通过向量的reserve()的方法预设向量容器的容量能加快大量元素插入的速度。
9.考虑采用引用技术的场合:1.目标对象消耗大量的资源;2.资源的分配和释放很昂贵;3.高度共享:由于使用赋值操作符和复制构造函数,所以引用计数可能比较大;4.引用的创建和清楚相对廉价。
10.90-20规则:80%的执行情况会便利29%的代码,80%的时间消耗在执行路径所遇到的20%的函数之上。20%的可能输入将占有80%的时间。
11.最后讲了点架构优化和设计优化。大部分和《深入理解计算机系统》等书说的差不多

efficient c++核心点的更多相关文章

  1. 论文阅读(Lukas Neuman——【ICDAR2015】Efficient Scene Text Localization and Recognition with Local Character Refinement)

    Lukas Neuman--[ICDAR2015]Efficient Scene Text Localization and Recognition with Local Character Refi ...

  2. Notes on 'Efficient Graph-Based Image Segmentation'

    Notes on Efficient Graph-Based Image Segmentation 算法的目标 按照一种确定的标准, 将图片分割成细粒度的语义区域, 即Super pixel. 算法步 ...

  3. Web Pages - Efficient Paging Without The WebGrid

    Web Pages - Efficient Paging Without The WebGrid If you want to display your data over a number of p ...

  4. HDU 5513 Efficient Tree

    HDU 5513 Efficient Tree 题意 给一个\(N \times M(N \le 800, M \le 7)\)矩形. 已知每个点\((i-1, j)\)和\((i,j-1)\)连边的 ...

  5. 论文笔记之:Fully Convolutional Attention Localization Networks: Efficient Attention Localization for Fine-Grained Recognition

    Fully Convolutional Attention Localization Networks: Efficient Attention Localization for Fine-Grain ...

  6. 【Deep Learning学习笔记】Efficient Estimation of Word Representations in Vector Space_google2013

    标题:Efficient Estimation of Word Representations in Vector Space 作者:Tomas Mikolov 发表于:ICLR 2013 主要内容: ...

  7. Zore copy(翻译《Efficient data transfer through zero copy》)

    原文:https://www.ibm.com/developerworks/library/j-zerocopy/ <Efficient data transfer through zero c ...

  8. cs231n spring 2017 lecture15 Efficient Methods and Hardware for Deep Learning 听课笔记

    1. 深度学习面临的问题: 1)模型越来越大,很难在移动端部署,也很难网络更新. 2)训练时间越来越长,限制了研究人员的产量. 3)耗能太多,硬件成本昂贵. 解决的方法:联合设计算法和硬件. 计算硬件 ...

  9. [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...

随机推荐

  1. java小技巧

    String 转 Date String classCode = RequestHandler.getString(request, "classCode"); SimpleDat ...

  2. inceptor es表插入成功,返回报错you should set transaction.type before any DCL statement

    在finebi下用星环的连接驱动去写inceptor es表,发现插入能成功,但是返回一个报错: Caused by: java.sql.SQLException: Error to commit. ...

  3. Codeforces Round #664 (Div. 2) D. Boboniu Chats with Du

    传送门:cf1395D 题意 给定一个长度为n的数组a[i]为当天说话的有趣值,如果a[i]>m,那么在 i 之后有d天不能说话.否则可以每天都说话.找到一个排列使得n天有趣值总和最大,问有趣值 ...

  4. 3. Linear Regression with Multiple Variables

    前面还有一章主要讲解,基本的Linear Algebra线性代数的知识,都比较简单,这里就直接跳过了. Speaker: Andrew Ng 1. Multiple featues 训练集的特征变成了 ...

  5. 2020牛客暑期多校训练营(第八场)Interesting Computer Game

    传送门:Interesting Computer Game 题意 给出n对数,你可以操作n次,每次操作只能在下面三种中选择一种,问最多可以选多少个不同的数字. 什么都不做 如果a[i]以前没选过,那么 ...

  6. Codeforces Round #533 (Div. 2) B. Zuhair and Strings(字符串)

    #include <bits/stdc++.h> using namespace std; int main() { int n,k;cin>>n>>k; stri ...

  7. POJ_2112 二分图多重匹配

    题意: //题意就是给你k个挤奶池和c头牛,每个挤奶池最多可以来m头牛,而且每头牛距离这k这挤奶池//有一定的距离,题目上给出k+c的矩阵,每一行代表某一个物品距离其他物品的位置//这里要注意给出的某 ...

  8. hdu5531 Rebuild

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...

  9. Codeforces Round #650 (Div. 3) F1. Flying Sort (Easy Version) (离散化,贪心)

    题意:有一组数,每次操作可以将某个数移到头部或者尾部,问最少操作多少次使得这组数非递减. 题解:先离散化将每个数映射为排序后所对应的位置,然后贪心,求最长连续子序列的长度,那么最少的操作次数一定为\( ...

  10. VS Code 搭建合适的 markdown 文档编写环境

    写在开头,之前我是使用Gitee与Github作为图床和Picgo搭配Typora使用的 ,但因为最近觉得这样还是稍微比较繁琐,然后因为VS Code是我的主要文本编辑器.Cpp,Python等均是在 ...