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

转载自: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. 六:SpringBoot-引入JdbcTemplate,和多数据源配置

    SpringBoot-引入JdbcTemplate,和多数据源配置 1.JdbcTemplate对象 1.1 JdbcTemplate核心方法 2.SpringBoot中使用JDBCTemplate ...

  2. Spark踩坑填坑-聚合函数-序列化异常

    Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...

  3. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  4. 提高 Kafka 吞吐量

    提高 Kafka 吞吐量 1.了解分区的数据速率,以确保提供合适的数据保存空间 2.除非您有其他架构上的需要,否则在写 Topic 时请使用随机分区 3.如果 Consumers 运行的是比 Kafk ...

  5. Linux踩坑填坑记录

    Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...

  6. 杂论-FTP

    FTP 一 简单介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时, ...

  7. 深入了解JavaScript中基于原型(prototype)的继承机制

    原型 前言 继承是面向对象编程中相当重要的一个概念,它对帮助代码复用起到了很大的作用. 正文 Brendan Eich在创建JavaScript时,没有选择当时最流行的类继承机制,而是借鉴Self,用 ...

  8. python爬虫下载小视频和小说(基础)

    下载视频: 1 from bs4 import BeautifulSoup 2 import requests 3 import re 4 import urllib 5 6 7 def callba ...

  9. 一文带你认识Docker

    Docker是一个容器技术的应用,而底层是由于Linux容器实现的,Docker只是实现层. 一.Linux容器 1.隔离与共享 一台服务器运行着多个逻辑隔离的服务器进程,谁的运行环境都不希望影响到谁 ...

  10. 一篇文章搞懂G1收集器

    一.何为G1收集器 The Garbage-First (G1) garbage collector is a server-style garbage collector, targeted for ...