我对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