zoukankan      html  css  js  c++  java
  • 《c++应用程序性能优化》读书笔记 part1

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

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

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

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

  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/JERRY7/p/8605811.html
Copyright © 2011-2022 走看看