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

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

前言

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

內(nèi)容概要

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

作者簡介

馮宏華,清華大學(xué)計算機科學(xué)與技術(shù)系碩士。IBM中國開發(fā)中心高級軟件工程師。2003年12月加入IBM中國開發(fā)中心,主要從事1BM產(chǎn)品的開發(fā)、性能優(yōu)化等工作。興趣包括C/C++應(yīng)用程序性能調(diào)優(yōu),Windows應(yīng)用程序開發(fā),Web應(yīng)用程序開發(fā)等。徐瑩,山東大學(xué)計算機科學(xué)與技術(shù)系碩士。2003年4月加入IBM中國開發(fā)中心,現(xiàn)任IBM中國開發(fā)中心開發(fā)經(jīng)理,一直從事IBM軟件產(chǎn)品在多個操作系統(tǒng)平臺上的開發(fā)工作。曾參與IBM產(chǎn)品在Windows和Linux平臺上的性能優(yōu)化工作,對C/C++編程語言和跨平臺的大型軟件系統(tǒng)的開發(fā)有較豐富的經(jīng)驗。程遠(yuǎn),北京大學(xué)計算機科學(xué)與技術(shù)系碩士。IBM中國開發(fā)中心高級軟件工程師。2003年加入IBM中國開發(fā)中心,主要從事IBM Productivity Tools產(chǎn)品的開發(fā)、性能優(yōu)化等工作。興趣包括C/C++編程語言,軟件性能工程,Windows/Linux平臺性能測試優(yōu)化工具等。汪磊,北京航空航天大學(xué)計算機科學(xué)與技術(shù)系碩士,目前是IBM中國軟件開發(fā)中心高級軟件工程師。從2002年12月加入IBM中國開發(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)的運行 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++對象模型 12 2.1 基本概念 12 2.1.1 程序使用內(nèi)存區(qū) 12 2.1.2 全局/靜態(tài)存儲區(qū)及常量數(shù)據(jù)區(qū) 15 2.1.3 堆和棧 16 2.1.4 C++中的對象 18 2.2 對象的生命周期 18 2.3 C++對象的內(nèi)存布局 23 2.3.1 簡單對象 23 2.3.2 單繼承 26 2.3.3 多繼承 29 2.4 構(gòu)造與析構(gòu) 38 2.5 本章小結(jié) 40 第3章 C++語言特性中的性能分析 41 3.1 構(gòu)造函數(shù)與析構(gòu)函數(shù) 42 3.2 繼承與虛擬函數(shù) 53 3.3 臨時對象 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 動態(tài)數(shù)組的實現(xiàn)及分析 102 4.2.1 動態(tài)數(shù)組簡介 102 4.2.2 動態(tài)數(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 訪問虛擬內(nèi)存時的處理流程 115 5.1.3 虛擬地址到物理地址的映射 117 5.1.4 虛擬內(nèi)存空間使用狀態(tài)記錄 120 5.1.5 進程工作集 121 5.1.6 Win32內(nèi)存相關(guān)API 123 5.2 Linux內(nèi)存管理機制 132 5.2.1 進程的內(nèi)存布局 133 5.2.2 物理內(nèi)存管理 135 5.2.3 虛擬內(nèi)存管理 136 5.2.4 虛擬地址映射為物理地址 137 5.3 本章小結(jié) 138 第6章 動態(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 一個內(nèi)存池的實現(xiàn)實例 170 7.2.1 內(nèi)部構(gòu)造 170 7.2.2 總體機制 171 7.2.3 細(xì)節(jié)剖析 174 7.2.4 使用方法 183 7.2.5 性能比較 184 7.3 本章小結(jié) 184 第4篇 應(yīng)用程序啟動性能優(yōu)化 第8章 動態(tài)鏈接與動態(tài)庫 186 8.1 鏈接技術(shù)的發(fā)展 186 8.1.1 編譯、鏈接和加載 187 8.1.2 靜態(tài)鏈接與靜態(tài)鏈接庫 189 8.1.3 動態(tài)鏈接與動態(tài)庫 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的雜項 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章 程序啟動過程 234 9.1 Win32程序啟動過程 234 9.2 Linux程序啟動過程 238 9.3 影響程序啟動性能的因素 239 9.3.1 源代碼因素 240 9.3.2 動態(tài)鏈接庫因素 241 9.3.3 配置文件/資源文件因素 247 9.3.4 其他因素 248 9.4 本章小結(jié) 250 第10章 程序啟動性能優(yōu)化 251 10.1 優(yōu)化程序啟動性能的步驟 251 10.2 測試程序啟動性能的方法 252 10.3 優(yōu)化可執(zhí)行文件和庫文件 255 10.3.1 減少動態(tài)鏈接庫的數(shù)量 255 10.3.2 減小動態(tài)鏈接庫尺寸 257 10.3.3 優(yōu)化可執(zhí)行文件和庫文件中的代碼布局 257 10.4 優(yōu)化源代碼 259 10.4.1 優(yōu)化啟動時讀取的配置文件及幫助文件 259 10.4.2 預(yù)讀頻繁訪問的文件 260 10.4.3 清除產(chǎn)生exception的代碼 261 10.4.4 PreLoad 262 10.4.5 延遲初始化 262 10.4.6 多線程化啟動 263 10.5 本章小結(jié) 264 第5篇 性能工具 第11章 內(nèi)存分析工具IBM Rational Purify 266 11.1 Rational Purify工作原理 266 11.2 使用Rational Purify來發(fā)現(xiàn)內(nèi)存泄漏 269 11.2.1 內(nèi)存泄漏及其對應(yīng)用程序性能的影響 269 11.2.2 用PerfMon來發(fā)現(xiàn)Windows系統(tǒng)中有嚴(yán)重后果的內(nèi)存泄漏 270 11.2.3 用Rational Purify來定位內(nèi)存泄漏 273 11.2.4 典型的內(nèi)存泄漏錯誤 274 11.3 Rational Purify使用指南 277 11.4 Rational Purify實例分析 283 11.5 本章小結(jié) 287 第12章 性能分析工具 IBM Rational Quantify 288 12.1 Rational Quantify工作原理 289 12.2 Rational Quantify使用指南 290 12.3 Rational Quantify實例分析 293 12.4 本章小結(jié) 297 第13章 實時IO監(jiān)測工具FileMon 298 13.1 FileMon的工作原理 298 13.2 FileMon使用指南 301 13.3 使用FileMon解決問題 303 13.4 本章小結(jié) 306 參考文獻 307

章節(jié)摘錄

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

編輯推薦

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

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


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


用戶評論 (總計2條)

 
 

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

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7