C++應(yīng)用程序性能優(yōu)化

出版時(shí)間:2010-6  出版社:馮宏華、徐瑩、程遠(yuǎn)、 等 電子工業(yè)出版社 (2010-06出版)  作者:馮宏華 等 著  頁(yè)數(shù):308  
Tag標(biāo)簽:無(wú)  

前言

在計(jì)算機(jī)發(fā)展的早期階段,硬件資源相對(duì)而言是非常昂貴的。不論是CPU運(yùn)行時(shí)間,還是內(nèi)存容量,都給編程人員設(shè)置了很大的限制。因此,當(dāng)時(shí)程序?qū)\(yùn)行性能和內(nèi)存空間占用的要求是非常嚴(yán)格的。很多開發(fā)人員為了減少1%的CPU運(yùn)行時(shí)間,為減少幾十個(gè),甚至幾個(gè)字節(jié)而孜孜努力。隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,硬件資源變得相對(duì)便宜。因此有的觀點(diǎn)認(rèn)為在開發(fā)軟件時(shí),軟件的性能優(yōu)化將不再重要,硬件將解決性能問(wèn)題。但事實(shí)上,這種觀點(diǎn)是相對(duì)片面的。的確,硬件的發(fā)展解決了部分軟件的性能問(wèn)題。但隨著硬件計(jì)算能力的提高,人們對(duì)軟件功能的要求也越來(lái)越高。當(dāng)今的軟件功能越來(lái)越復(fù)雜,給用戶的界面和操作體驗(yàn)也越來(lái)越智能和友好,這些需求帶來(lái)的軟件性能上的要求是硬件不能完全解決的。很多實(shí)際的項(xiàng)目證明,如果在開發(fā)軟件時(shí)不重視性能的優(yōu)化,最終雖然實(shí)現(xiàn)了功能上的要求,但軟件的運(yùn)行效率低下,也不能給用戶帶來(lái)很好的效益。因此,軟件的性能優(yōu)化是計(jì)算機(jī)軟件開發(fā)過(guò)程中需要一直關(guān)注的重要因素。

內(nèi)容概要

  《C++應(yīng)用程序性能優(yōu)化(第2版)》主要針對(duì)的是C++程序的性能優(yōu)化,深入介紹C++程序性能優(yōu)化的方法和實(shí)例。全書由5篇組成,第1,2篇介紹C++語(yǔ)言的對(duì)象模型,該篇是優(yōu)化C++程序的基礎(chǔ);第3篇主要針對(duì)如何優(yōu)化C++程序的內(nèi)存使用;第4篇介紹如何優(yōu)化程序的啟動(dòng)性能;第5篇介紹了三類性能優(yōu)化工具,即內(nèi)存分析工具、性能分析工具和I/O檢測(cè)工具,它們是測(cè)量程序性能的利器。  《C++應(yīng)用程序性能優(yōu)化(第2版)》適用于有一定C++程序開發(fā)經(jīng)驗(yàn)的開發(fā)人員,也可以作為高校相關(guān)專業(yè)師生的參考書。

作者簡(jiǎn)介

馮宏華,清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系碩士。IBM中國(guó)開發(fā)中心高級(jí)軟件工程師。2003年12月加入IBM中國(guó)開發(fā)中心,主要從事1BM產(chǎn)品的開發(fā)、性能優(yōu)化等工作。興趣包括C/C++應(yīng)用程序性能調(diào)優(yōu),Windows應(yīng)用程序開發(fā),Web應(yīng)用程序開發(fā)等。徐瑩,山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系碩士。2003年4月加入IBM中國(guó)開發(fā)中心,現(xiàn)任IBM中國(guó)開發(fā)中心開發(fā)經(jīng)理,一直從事IBM軟件產(chǎn)品在多個(gè)操作系統(tǒng)平臺(tái)上的開發(fā)工作。曾參與IBM產(chǎn)品在Windows和Linux平臺(tái)上的性能優(yōu)化工作,對(duì)C/C++編程語(yǔ)言和跨平臺(tái)的大型軟件系統(tǒng)的開發(fā)有較豐富的經(jīng)驗(yàn)。程遠(yuǎn),北京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系碩士。IBM中國(guó)開發(fā)中心高級(jí)軟件工程師。2003年加入IBM中國(guó)開發(fā)中心,主要從事IBM Productivity Tools產(chǎn)品的開發(fā)、性能優(yōu)化等工作。興趣包括C/C++編程語(yǔ)言,軟件性能工程,Windows/Linux平臺(tái)性能測(cè)試優(yōu)化工具等。汪磊,北京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系碩士,目前是IBM中國(guó)軟件開發(fā)中心高級(jí)軟件工程師。從2002年12月加入IBM中國(guó)開發(fā)中心至今一直從事旨在提高企業(yè)生產(chǎn)效率的應(yīng)用軟件開發(fā)。興趣包括C/C++應(yīng)用程序的性能調(diào)優(yōu),Java應(yīng)用程序的性能調(diào)優(yōu)。

書籍目錄

第1篇 應(yīng)用程序性能優(yōu)化概述 第1章 應(yīng)用程序性能優(yōu)化概述 2 1.1 應(yīng)用程序性能的定義 2 1.2 性能基準(zhǔn) 3 1.2.1 基準(zhǔn)負(fù)載 3 1.2.2 基準(zhǔn)用例 4 1.2.3 性能基準(zhǔn)的運(yùn)行 5 1.2.4 性能基準(zhǔn)結(jié)果 6 1.3 性能分析方法概述 7 1.4 性能優(yōu)化方法概述 9 1.5 本章小結(jié) 10 第2篇 C++程序優(yōu)化基礎(chǔ) 第2章 C++對(duì)象模型 12 2.1 基本概念 12 2.1.1 程序使用內(nèi)存區(qū) 12 2.1.2 全局/靜態(tài)存儲(chǔ)區(qū)及常量數(shù)據(jù)區(qū) 15 2.1.3 堆和棧 16 2.1.4 C++中的對(duì)象 18 2.2 對(duì)象的生命周期 18 2.3 C++對(duì)象的內(nèi)存布局 23 2.3.1 簡(jiǎn)單對(duì)象 23 2.3.2 單繼承 26 2.3.3 多繼承 29 2.4 構(gòu)造與析構(gòu) 38 2.5 本章小結(jié) 40 第3章 C++語(yǔ)言特性中的性能分析 41 3.1 構(gòu)造函數(shù)與析構(gòu)函數(shù) 42 3.2 繼承與虛擬函數(shù) 53 3.3 臨時(shí)對(duì)象 61 3.4 內(nèi)聯(lián)函數(shù) 75 3.5 本章小結(jié) 83 第4章 常用數(shù)據(jù)結(jié)構(gòu)的性能分析 84 4.1 常用數(shù)據(jù)結(jié)構(gòu)性能分析 84 4.1.1 遍歷 89 4.1.2 插入 91 4.1.3 刪除 94 4.1.4 排序 96 4.1.5 查找 100 4.2 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)及分析 102 4.2.1 動(dòng)態(tài)數(shù)組簡(jiǎn)介 102 4.2.2 動(dòng)態(tài)數(shù)組實(shí)踐及分析 104 4.3 本章小結(jié) 110 第3篇 內(nèi)存使用優(yōu)化 第5章 操作系統(tǒng)的內(nèi)存管理 112 5.1 Windows內(nèi)存管理 112 5.1.1 使用虛擬內(nèi)存 113 5.1.2 訪問(wèn)虛擬內(nèi)存時(shí)的處理流程 115 5.1.3 虛擬地址到物理地址的映射 117 5.1.4 虛擬內(nèi)存空間使用狀態(tài)記錄 120 5.1.5 進(jìn)程工作集 121 5.1.6 Win32內(nèi)存相關(guān)API 123 5.2 Linux內(nèi)存管理機(jī)制 132 5.2.1 進(jìn)程的內(nèi)存布局 133 5.2.2 物理內(nèi)存管理 135 5.2.3 虛擬內(nèi)存管理 136 5.2.4 虛擬地址映射為物理地址 137 5.3 本章小結(jié) 138 第6章 動(dòng)態(tài)內(nèi)存管理 139 6.1 operator new/delete 139 6.2 自定義全局operator new/delete 144 6.3 自定義類operator new/delete 148 6.4 避免內(nèi)存泄漏 151 6.5 智能指針 156 6.6 本章小結(jié) 166 第7章 內(nèi)存池 167 7.1 自定義內(nèi)存池性能優(yōu)化的原理 167 7.1.1 默認(rèn)內(nèi)存管理函數(shù)的不足 167 7.1.2 內(nèi)存池的定義和分類 168 7.1.3 內(nèi)存池工作原理示例 168 7.2 一個(gè)內(nèi)存池的實(shí)現(xiàn)實(shí)例 170 7.2.1 內(nèi)部構(gòu)造 170 7.2.2 總體機(jī)制 171 7.2.3 細(xì)節(jié)剖析 174 7.2.4 使用方法 183 7.2.5 性能比較 184 7.3 本章小結(jié) 184 第4篇 應(yīng)用程序啟動(dòng)性能優(yōu)化 第8章 動(dòng)態(tài)鏈接與動(dòng)態(tài)庫(kù) 186 8.1 鏈接技術(shù)的發(fā)展 186 8.1.1 編譯、鏈接和加載 187 8.1.2 靜態(tài)鏈接與靜態(tài)鏈接庫(kù) 189 8.1.3 動(dòng)態(tài)鏈接與動(dòng)態(tài)庫(kù) 195 8.2 Windows DLL,Dynamic Linked Library 196 8.2.1 DLL基礎(chǔ) 196 8.2.2 DLL如何工作 200 8.2.3 關(guān)于DLL的雜項(xiàng) 208 8.3 Linux DSO 209 8.3.1 DSO與ELF 209 8.3.2 DSO如何工作 217 8.3.3 構(gòu)建與使用DSO 223 8.4 本章小結(jié) 233 第9章 程序啟動(dòng)過(guò)程 234 9.1 Win32程序啟動(dòng)過(guò)程 234 9.2 Linux程序啟動(dòng)過(guò)程 238 9.3 影響程序啟動(dòng)性能的因素 239 9.3.1 源代碼因素 240 9.3.2 動(dòng)態(tài)鏈接庫(kù)因素 241 9.3.3 配置文件/資源文件因素 247 9.3.4 其他因素 248 9.4 本章小結(jié) 250 第10章 程序啟動(dòng)性能優(yōu)化 251 10.1 優(yōu)化程序啟動(dòng)性能的步驟 251 10.2 測(cè)試程序啟動(dòng)性能的方法 252 10.3 優(yōu)化可執(zhí)行文件和庫(kù)文件 255 10.3.1 減少動(dòng)態(tài)鏈接庫(kù)的數(shù)量 255 10.3.2 減小動(dòng)態(tài)鏈接庫(kù)尺寸 257 10.3.3 優(yōu)化可執(zhí)行文件和庫(kù)文件中的代碼布局 257 10.4 優(yōu)化源代碼 259 10.4.1 優(yōu)化啟動(dòng)時(shí)讀取的配置文件及幫助文件 259 10.4.2 預(yù)讀頻繁訪問(wèn)的文件 260 10.4.3 清除產(chǎn)生exception的代碼 261 10.4.4 PreLoad 262 10.4.5 延遲初始化 262 10.4.6 多線程化啟動(dòng) 263 10.5 本章小結(jié) 264 第5篇 性能工具 第11章 內(nèi)存分析工具IBM Rational Purify 266 11.1 Rational Purify工作原理 266 11.2 使用Rational Purify來(lái)發(fā)現(xiàn)內(nèi)存泄漏 269 11.2.1 內(nèi)存泄漏及其對(duì)應(yīng)用程序性能的影響 269 11.2.2 用PerfMon來(lái)發(fā)現(xiàn)Windows系統(tǒng)中有嚴(yán)重后果的內(nèi)存泄漏 270 11.2.3 用Rational Purify來(lái)定位內(nèi)存泄漏 273 11.2.4 典型的內(nèi)存泄漏錯(cuò)誤 274 11.3 Rational Purify使用指南 277 11.4 Rational Purify實(shí)例分析 283 11.5 本章小結(jié) 287 第12章 性能分析工具 IBM Rational Quantify 288 12.1 Rational Quantify工作原理 289 12.2 Rational Quantify使用指南 290 12.3 Rational Quantify實(shí)例分析 293 12.4 本章小結(jié) 297 第13章 實(shí)時(shí)IO監(jiān)測(cè)工具FileMon 298 13.1 FileMon的工作原理 298 13.2 FileMon使用指南 301 13.3 使用FileMon解決問(wèn)題 303 13.4 本章小結(jié) 306 參考文獻(xiàn) 307

章節(jié)摘錄

插圖:當(dāng)通過(guò)VirtualAlloc申請(qǐng)一塊虛擬內(nèi)存時(shí),虛擬內(nèi)存管理器是如何知道哪些內(nèi)存塊是自由的,可以用來(lái)滿足此次內(nèi)存請(qǐng)求呢?即Win32虛擬內(nèi)存如何維護(hù)和記錄每一個(gè)進(jìn)程的4GB虛擬內(nèi)存地址空間的使用狀態(tài),如各個(gè)區(qū)域的狀態(tài)、大小及起始地址呢?上一節(jié)中,讀者也許會(huì)認(rèn)為可以通過(guò)遍歷頁(yè)目錄和頁(yè)表中的項(xiàng)值來(lái)收集虛擬內(nèi)存空間的使用狀態(tài),但這樣做首先有效率問(wèn)題,因?yàn)槊看紊暾?qǐng)內(nèi)存都需要做一次搜索。但這個(gè)方法不僅僅是因?yàn)樾视袉?wèn)題,而且還是行不通的,對(duì)預(yù)留的頁(yè)來(lái)說(shuō),虛擬內(nèi)存管理器并沒(méi)有為之分配物理存儲(chǔ)。所以也就不會(huì)為其填寫頁(yè)表項(xiàng),這時(shí)遍歷頁(yè)表無(wú)法分辨某塊虛擬內(nèi)存是自由還是預(yù)留的。另外即使對(duì)提交頁(yè)來(lái)說(shuō),遍歷頁(yè)表也無(wú)法得到完整的信息,正如5.1.1節(jié)中提到的Win32在虛擬內(nèi)存管理時(shí)用到的主要策略demand-paging,即Win32虛擬內(nèi)存管理器在程序沒(méi)有實(shí)際訪問(wèn)某塊內(nèi)存前,總是假定這塊內(nèi)存不會(huì)被訪問(wèn)到,因此不會(huì)為這塊內(nèi)存做過(guò)多處理,包括不會(huì)為其分配真正的物理內(nèi)存空間,甚至頁(yè)表,即進(jìn)程中用來(lái)完成虛擬地址到物理地址映射的頁(yè)表的存儲(chǔ)空間也是隨需分配的。Win32虛擬內(nèi)存管理器使用另外一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)記錄和維護(hù)每個(gè)進(jìn)程的4 GB虛擬地址空間的使用及狀態(tài)信息,這就是虛擬地址描述符樹(Virtual Address Descriptor,VAD)。每一個(gè)進(jìn)程都有一個(gè)自己的’VAD集合,這個(gè)集合中的VAD被組織成一個(gè)自平衡二叉樹,以提高查找的效率。另外只有預(yù)留或者提交的內(nèi)存塊才會(huì)有VAD,自由的內(nèi)存塊沒(méi)有VAD(因此不在VAD樹結(jié)構(gòu)中的虛擬地址塊就是自由的)。’VAD的組織如圖5.5所示。(1)當(dāng)程序申請(qǐng)一塊新內(nèi)存時(shí),虛擬內(nèi)存管理器只需訪問(wèn)VAD樹。找到兩個(gè)相鄰VAD,只要小的VAD的上限與大的VAD的下限之間的差值滿足所申請(qǐng)的內(nèi)存塊的大小需求,即可使用二者之間的虛擬內(nèi)存。(2)當(dāng)?shù)谝淮卧L問(wèn)提交的內(nèi)存時(shí),虛擬內(nèi)存管理器根據(jù)上一節(jié)描述的流程。即總是假定該數(shù)據(jù)頁(yè)已在物理內(nèi)存中,并進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換。當(dāng)找到相應(yīng)的頁(yè)目錄項(xiàng)后發(fā)現(xiàn)該頁(yè)目錄項(xiàng)并沒(méi)有指向一個(gè)合法的頁(yè)表,它就會(huì)查找該進(jìn)程的VAD樹。

編輯推薦

“工欲善其事必先利其器”,《C++應(yīng)用程序性能優(yōu)化(第2版)》針對(duì)C++程序性能優(yōu)化問(wèn)題,深入剖析程序的內(nèi)在本質(zhì)(編程設(shè)計(jì)因素)和外在形式(系統(tǒng)結(jié)構(gòu)因素),展示應(yīng)用程序優(yōu)化的方法和實(shí)例。第1篇 性能優(yōu)化全局性介紹。概述性能優(yōu)化工作的基本概念、流程和方法論。第2篇 C++程序優(yōu)化基礎(chǔ)。介紹C++語(yǔ)言的對(duì)象模型、與性能有關(guān)的語(yǔ)言特性及數(shù)據(jù)結(jié)構(gòu)的性能。第3篇 C++程序內(nèi)存使用的優(yōu)化。介紹如何在特定平臺(tái)下進(jìn)行內(nèi)存優(yōu)化,并深入介紹C++語(yǔ)言管理動(dòng)態(tài)內(nèi)存的機(jī)制和方法,以及內(nèi)存池的實(shí)現(xiàn)。第4篇 程序啟動(dòng)性能優(yōu)化。介紹動(dòng)態(tài)庫(kù)的基本知識(shí),以及程序啟動(dòng)性能優(yōu)化的具體方法。介紹幾類性能測(cè)量和分析的利器。如內(nèi)存分析工具、性能分第5篇 介紹幾類性能測(cè)量和分析的利器。如內(nèi)存分析工具、性能分析工具、I/檢測(cè)工具等。系統(tǒng)介紹性能優(yōu)化的工作流程,方法論,C++性能特性,分析工具等,并配合大量最佳實(shí)踐及代碼實(shí)例。

圖書封面

圖書標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    C++應(yīng)用程序性能優(yōu)化 PDF格式下載


用戶評(píng)論 (總計(jì)2條)

 
 

  •   書不錯(cuò),對(duì)初學(xué)者比較合適,但內(nèi)容有些臃腫。個(gè)人覺得<<提高C++性能的編程技術(shù)>>要好一些。
  •   看了第一版,看到了第六章。覺得還不錯(cuò)
 

250萬(wàn)本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7