《c++应用程序性能优化》读书笔记 part1

我对C++有一定的了解,也写过一些C++的代码,所以我想看看这本书来加深我对C++的理解。打开书,它分为4篇,第一章介绍C++的程序优化基础,第二章介绍C++的内存使用优化,第三章介绍应用程序的启动性能优化,第四章介绍一些性能优化的工具。

因为时间原因,我本周看的是第一章。第一章上来先介绍了C++的程序占用内存区的方式。一般有5种:全局/静态数据、常量数据区、代码区、栈、堆。根据这五种类型,我们可以针对的设计优化的方法。一般来说,堆和栈的使用是必不可少的。例如:链表,当需要为链表新增节点时,就需要在堆上申请内存并创建节点。另外堆和栈还有如下的差别:1、大小。一般说来,一个程序使用的栈的大小是固定的,由编译器决定,一般是1M,可以通过编译选项调整栈的大小。而堆的大小一般只受限于系统有效的虚拟内存的大小。2、效率。栈上的内存是系统自动分配的,压栈和出栈都有相应的指令进行操作。因此效率较高,并且分配的内存空间是连续的,不会产生内存碎片;而堆上的内存是由开发人员来动态分配和回收的。当开发人员通过new或malloc申请堆上的内存时,系统需要按一定的算法在堆空间中寻找合适大小的空闲堆,并修改相应的维护堆空闲空间的链表,然后返回地址给程序。因此效率比栈要低,此外还容易产生内存碎片。看起来栈的使用相对要方便而且效率高,但是有的时候,堆可以解决一些栈不能解决的问题。比如:要存放一个未知大小的数组,使用栈来作为存储空间显然不合适,这时候就要用分配动态存储空间,这时候使用堆就要好一点了。但是也带来了一些问题,比如效率较低。这时候就要对内存的使用进行优化了。

第一部分的内容主要是对C++的简单介绍,因为我之前了解过,就没有细看了。第二部分说的内容大概就是优化性能的一些思路,这是我以前所不了解的。比如碰到了瓶颈,很多时候,一个程序的速度在框架设计完成时大致已经确定了,而并非是因为采用了C++语言才使其速度没有达到预期的目标。当遇到性能问题时,首先应该检查和反思程序的总体框架。然后用性能检测工具对其实际运行做准确地测量,再针对瓶颈进行分析和优化。常见的一些因素有,从堆中释放内存,构造函数和析构函数的调用,大量的函数调用。这些都非常耗时,我们应该多加注意,尽量减少动态存储空间的使用,临时对象的建立要多加考虑,函数里的代码量比较小的时候尽量采用内联函数等(我堆内联函数用的蛮少的orz)。

这些方法我觉得十分有用,因为我不知道我以前的一些坏习惯可能会导致程序的性能下降很多。而且我觉得不光是C++,对其他的一些语言也有借鉴的意义,在以后的编程中我会多加考虑这些问题。

原文地址:https://www.cnblogs.com/JERRY7/p/8605811.html

时间: 2024-10-10 04:10:02

《c++应用程序性能优化》读书笔记 part1的相关文章

Web应用程序性能优化学习笔记

Web应用程序性能优化学习笔记 1. 使用瀑布图初步诊断网站性能瓶颈 一般来说,打开一个网页的速度会受到以下几项的影响: 1) 服务器花了太长的时间将.aspx页面的内容转化为html. 2) .aspx页面花了太长的时间从服务器端将内容发送到客户端. 3) 页面上的图片或者flash文件花了太长的时间从服务器端发送到客户端. 4) JavaScript和CSS文件阻塞页面渲染. 我们可以使用“瀑布图”来确定一个页面的性能问题是由于哪一项造成的.FireBug.Chrome自带的“开发人员工具”

图解性能优化读书笔记(三)

1. 部分性能优化用的命令 sar -f 获取一段时间内的服务器信息. vmstat  5  5 每五秒钟显示五次的命令. ps -elf 显示正在运行的进程信息. netstat -r netstat -a 显示网络路由信息和网络所有的端口信息 ---windows可以用|findstr "1521' linux使用 |grep 1521 的方式进行管道命令处理. iostat -xt 5 5 显示io子系统的 top 显示OS级别的信息 perf命令 这一个可以找时间仔细学习一下 windo

图解性能优化读书笔记--虚拟机部分性能(二)

今天看到了虚拟化部分的性能优化,因为加班时先看了下知乎关于CPU架构的介绍,然后看书时间缩短了很多,比较概略的看了一下,要点: 1. 虚拟化的种类.bare-metal的和host方式的 以及介绍了下半虚拟化和全虚拟化,以及CPU的辅助虚拟化,这里面与我之前的理解不太一样 他认为的全虚拟化性能比较差一些,需要host os 协助进行命令转码,版虚拟化应该是ring -1 级执行的命令了. 2. over commited 在自己使用虚拟机的过程中经常CPU 超售,但是没有对内存进行超售,看到有内

《Java程序性能优化》学习笔记 Ⅰ设计优化

豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞吐量: 响应时间: 2.木桶定律   系统的最终性能取决于系统中性能表现最差的组件,例如window系统内置的评分就是选取最低分.可能成为系统瓶颈的计算资源如,磁盘I/O,异常,数据库,锁竞争,内存等. 性能优化的几个方面,如设计优化,Java程序优化,并行程序开发及优化,JVM调优,Java性能调

《Java程序性能优化》学习笔记 Ⅳ JVM调优

第五章 JVM调优5.1 Java虚拟机内存模型1.JVM虚拟机将其内存数据分为程序计数器.虚拟机栈,本地方法栈,Java堆,和方法去等部分.5.2 JVM内存分配参数5.3 垃圾收集基础5.4 常用调优案例和方法5.5 使用JVM参数5.6 实战JVM调优 <Java程序性能优化>学习笔记 Ⅳ JVM调优

《Java程序性能优化》学习笔记 Ⅲ 并行程序优化

第四章 并行程序优化4.1 并行程序设计模式4.2 JDK多任务执行框架4.3 JDK并发数据结构4.4 并发控制方法4.5 锁的性能和优化4.6 无锁的并行计算 1.非阻塞同步避免了基于锁的同步的缺陷,无锁算法没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销.CAS算法:包含3个参数CAS(v,e,n).V表示要更新的变量,E表示预期值,N表示新值2.JDK的java.util.concurrent.atomic包下,有一组使用无锁算法实现的原子操作类,如AtomicInteger/A

《Java程序性能优化》学习笔记 Ⅱ程序优化

这一部分主要介绍代码层的优化.了解如何编写高效而精炼的代码,正确的使用函数方法.1.字符串优化处理Java语言中,String对象可以认为是对char数组的眼神和进一步封装.它主要由3部分组成:char数组.偏移量和String的长度.String对象的三个基本特点:不变性,针对常量池的优化,类的final定义. 不变性:是指String对象一旦生成,不能再对它进行改变,即immutable模式.不变模式的作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和所等待的时间,大幅提高系

Java 程序优化 (读书笔记)

--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能指标: 执行时间,CPU时间,内存分配,磁盘吞吐量,网络吞吐量,响应时间. 优化策略: 木桶原理,优化性能瓶颈. 1.2 性能调优的层次 设计调优, 代码调优, JVM调优, 数据库调优, 操作系统调优. 2. 设计优化 2.1 善用设计模式 单例模式: 对于巨大对象,节省创建对象的时间空间: 代理

这些基础知识你都了解吗?——《松本行弘的程序世界》读书笔记(上)

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和

《松本行弘的程序世界》读书笔记

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和