C++性能優化指南

C++性能優化指南 下載 mobi epub pdf 電子書 2024


簡體網頁||繁體網頁
Kurt Guntheroth 著



點擊這裡下載
    

想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!

發表於2024-12-26

類似圖書 點擊查看全場最低價


圖書介紹

齣版社: 人民郵電齣版社
ISBN:9787115471390
版次:1
商品編碼:12269007
包裝:平裝
開本:16開
齣版時間:2018-01-01
用紙:膠版紙


相關圖書





圖書描述

編輯推薦

  程序性能至關重要。本書就是一本C++性能調優實踐指南,精選工作中頻繁使用和能夠帶來顯著性能提升效果的技術,且包含大量實例介紹,旨在幫助讀者學會如何讓已經餞行瞭設計實踐原則的C++程序在消耗更少資源的情況下運行得更快。在熟悉代碼優化的過程中,讀者也會瞭解卓越代碼的編程之道,形成可以提高優化效果的思維模式。
  書中所提的多數優化技巧也適用於其他編程語言。
  - 使用分析器和軟件計時器定位性能熱點
  - 學習通過可重復的實驗測量修改後的代碼的性能
  - 優化動態分配內存的變量的使用
  - 改善熱點循環和函數的性能
  - 提高字符串處理函數的速度
  - 認識高效算法和優化模式
  - 學習C++容器類的優點和缺點
  - 站在優化人員的角度審視查找和排序
  - 高效使用C++流輸入輸齣函數
  - 高效使用C++的基於綫程的並發特性

內容簡介

  本書是一本C++代碼優化指南。作者精選瞭他在近30年編程生涯中zui頻繁使用的技術和能夠帶來zuida性能提升效果的技術,旨在讓讀者在提升C++程序的同時,思考軟件優化之美。書中主要內容有:代碼優化的意義和總原則,與優化有關的計算機硬件背景知識,能行分析方法及工具,優化字符串的使用,算法、查找和排序等等。

作者簡介

  Kurt Guntheroth 軟件開發工作近40年,C++代碼實用年齡20餘年。具有在Windows、Linux和嵌入式設備上的開發經驗。 Kurt不是一個工作狂,他喜歡陪伴他的妻子和那四個活潑的兒子。Kurt居住在華盛頓州的西雅圖。

目錄

前言  xvii

第1章 優化概述  1

1.1 優化是軟件開發的一部分  2

1.2 優化是高效的  3

1.3 優化是沒有問題的  3

1.4 這兒一納秒,那兒一納秒  5

1.5 C++代碼優化策略總結  5

1.5.1 用好的編譯器並用好編譯器  6

1.5.2 使用更好的算法  7

1.5.3 使用更好的庫  8

1.5.4 減少內存分配和復製  9

1.5.5 移除計算  9

1.5.6 使用更好的數據結構  9

1.5.7 提高並發性  10

1.5.8 優化內存管理  10

1.6 小結  10

第2章 影響優化的計算機行為  11

2.1 C++所相信的計算機謊言  12

2.2 計算機的真相  12

2.2.1 內存很慢  13

2.2.2 內存訪問並非以字節為單位  13

2.2.3 某些內存訪問會比其他的更慢  14

2.2.4 內存字分為大端和小端  14

2.2.5 內存容量是有限的  15

2.2.6 指令執行緩慢  16

2.2.7 計算機難以作決定  16

2.2.8 程序執行中的多個流  16

2.2.9 調用操作係統的開銷是昂貴的  18

2.3 C++也會說謊  18

2.3.1 並非所有語句的性能開銷都相同  18

2.3.2 語句並非按順序執行  18

2.4 小結  19

第3章 測量性能  20

3.1 優化思想  21

3.1.1 必須測量性能  21

3.1.2 優化器是王牌獵人  21

3.1.3 90/10規則  22

3.1.4 阿姆達爾定律  23

3.2 進行實驗  24

3.2.1 記實驗筆記  26

3.2.2 測量基準性能並設定目標  26

3.2.3 你隻能改善你能夠測量的  28

3.3 分析程序執行  28

3.4 測量長時間運行的代碼  30

3.4.1 一點關於測量時間的知識  30

3.4.2 用計算機測量時間  35

3.4.3 剋服測量障礙  41

3.4.4 創建stopwatch類  44

3.4.5 使用測試套件測量熱點函數  48

3.5 評估代碼開銷來找齣熱點代碼  48

3.5.1 評估獨立的C++語句的開銷  49

3.5.2 評估循環的開銷  49

3.6 其他找齣熱點代碼的方法  51

3.7 小結  51

第4章 優化字符串的使用:案例研究  53

4.1 為什麼字符串很麻煩  53

4.1.1 字符串是動態分配的  54

4.1.2 字符串就是值  54

4.1.3 字符串會進行大量復製  55

4.2 第一次嘗試優化字符串  56

4.2.1 使用復閤賦值操作避免臨時字符串  57

4.2.2 通過預留存儲空間減少內存的重新分配  57

4.2.3 消除對參數字符串的復製  58

4.2.4 使用迭代器消除指針解引  59

4.2.5 消除對返迴的字符串的復製  59

4.2.6 用字符數組代替字符串  60

4.2.7 第一次優化總結  62

4.3 第二次嘗試優化字符串  62

4.3.1 使用更好的算法  62

4.3.2 使用更好的編譯器  64

4.3.3 使用更好的字符串庫  64

4.3.4 使用更好的內存分配器  67

4.4 消除字符串轉換  69

4.4.1 將C字符串轉換為std::string  69

4.4.2 不同字符集間的轉換  70

4.5 小結  70

第5章 優化算法  71

5.1 算法的時間開銷  72

5.1.1 最優情況、平均情況和最差情況的時間開銷  74

5.1.2 攤銷時間開銷  74

5.1.3 其他開銷  75

5.2 優化查找和排序的工具箱  75

5.3 高效查找算法  75

5.3.1 查找算法的時間開銷  75

5.3.2 當n很小時,所有算法的時間開銷都一樣  76

5.4 高效排序算法  77

5.4.1 排序算法的時間開銷  77

5.4.2 替換在最差情況下性能較差的排序算法  77

5.4.3 利用輸入數據集的已知特性  78

5.5 優化模式  78

5.5.1 預計算  79

5.5.2 延遲計算  80

5.5.3 批量處理  80

5.5.4 緩存  80

5.5.5 特化  81

5.5.6 提高處理量  81

5.5.7 提示  81

5.5.8 優化期待路徑  82

5.5.9 散列法  82

5.5.10 雙重檢查  82

5.6 小結  82

第6章 優化動態分配內存的變量  83

6.1 C++變量迴顧  84

6.1.1 變量的存儲期  84

6.1.2 變量的所有權  86

6.1.3 值對象與實體對象  86

6.2 C++動態變量API迴顧  88

6.2.1 使用智能指針實現動態變量所有權的自動化  90

6.2.2 動態變量有運行時開銷  92

6.3 減少動態變量的使用  92

6.3.1 靜態地創建類實例  92

6.3.2 使用靜態數據結構  93

6.3.3 使用std::make_shared 替代new 錶達式  97

6.3.4 不要無謂地共享所有權  97

6.3.5 使用“主指針”擁有動態變量  98

6.4 減少動態變量的重新分配  99

6.4.1 預分配動態變量以防止重新分配  99

6.4.2 在循環外創建動態變量  99

6.5 移除無謂的復製  100

6.5.1 在類定義中禁止不希望發生的復製  101

6.5.2 移除函數調用上的復製  102

6.5.3 移除函數返迴上的復製  103

6.5.4 免復製庫  105

6.5.5 實現寫時復製慣用法  106

6.5.6 切割數據結構  106

6.6 實現移動語義  107

6.6.1 非標準復製語義:痛苦的實現  107

6.6.2 std::swap():“窮人”的移動語義  108

6.6.3 共享所有權的實體  109

6.6.4 移動語義的移動部分  109

6.6.5 更新代碼以使用移動語義  110

6.6.6 移動語義的微妙之處   111

6.7 扁平數據結構  113

6.8 小結  113

第7章 優化熱點語句  115

7.1 從循環中移除代碼  116

7.1.1 緩存循環結束條件值  117

7.1.2 使用更高效的循環語句  117

7.1.3 用遞減替代遞增  118

7.1.4 從循環中移除不變性代碼  118

7.1.5 從循環中移除無謂的函數調用  119

7.1.6 從循環中移除隱含的函數調用  121

7.1.7 從循環中移除昂貴的、緩慢改變的調用  123

7.1.8 將循環放入函數以減少調用開銷  123

7.1.9 不要頻繁地進行操作  124

7.1.10 其他優化技巧  126

7.2 從函數中移除代碼  126

7.2.1 函數調用的開銷  126

7.2.2 簡短地聲明內聯函數  129

7.2.3 在使用之前定義函數  129

7.2.4 移除未使用的多態性  130

7.2.5 放棄不使用的接口  130

7.2.6 用模闆在編譯時選擇實現  133

7.2.7 避免使用PIMPL慣用法  134

7.2.8 移除對DDL的調用  135

7.2.9 使用靜態成員函數取代成員函數  136

7.2.10 將虛析構函數移至基類中  136

7.3 優化錶達式  137

7.3.1 簡化錶達式  137

7.3.2 將常量組閤在一起  138

7.3.3 使用更高效的運算符  139

7.3.4 使用整數計算替代浮點型計算  139

7.3.5 雙精度類型可能會比浮點型更快  140

7.3.6 用閉形式替代迭代計算  141

7.4 優化控製流程慣用法  142

7.4.1 用switch替代if-else if-else  142

7.4.2 用虛函數替代switch 或if  143

7.4.3 使用無開銷的異常處理  144

7.5 小結  145

第8章 使用更好的庫  146

8.1 優化標準庫的使用  146

8.1.1 C++標準庫的哲學  147

8.1.2 使用C++標準庫的注意事項  147

8.2 優化現有庫  149

8.2.1 改動越少越好  149

8.2.2 添加函數,不要改動功能  150

8.3 設計優化庫  150

8.3.1 草率編碼後悔多  150

8.3.2 在庫的設計上,簡約是一種美德  151

8.3.3 不要在庫內分配內存  152

8.3.4 若有疑問,以速度為準  152

8.3.5 函數比框架更容易優化  152

8.3.6 扁平繼承層次關係  153

8.3.7 扁平調用鏈  153

8.3.8 扁平分層設計  153

8.3.9 避免動態查找  154

8.3.10 留意“上帝函數”  155

8.4 小結  156

第9章 優化查找和排序  157

9.1 使用std::map和std::string的鍵值對錶  158

9.2 改善查找性能的工具箱  159

9.2.1 進行一次基準測量  160

9.2.2 識彆齣待優化的活動  160

9.2.3 分解待優化的活動  160

9.2.4 修改或替換算法和數據結構  161

9.2.5 在自定義抽象上應用優化過程  162

9.3 優化std::map的查找  163

9.3.1 以固定長度的字符數組作為std::map的鍵  163

9.3.2 以C風格的字符串組作為鍵使用std::map  164

9.3.3 當鍵就是值的時候,使用map的錶親std::set  166

9.4 使用頭文件優化算法  167

9.4.1 以序列容器作為被查找的鍵值對錶  168

9.4.2 std::find():功能如其名,O(n)時間開銷  169

9.4.3 std::binary_search():不返迴值  169

9.4.4 使用std::equal_range()的二分查找  170

9.4.5 使用std::lower_bound()的二分查找  170

9.4.6 自己編寫二分查找法  171

9.4.7 使用strcmp()自己編寫二分查找法  172

9.5 優化鍵值對散列錶中的查找  173

9.5.1 使用std::unordered_map進行散列  173

9.5.2 對固定長度字符數組的鍵進行散列  174

9.5.3 以空字符結尾的字符串為鍵進行散列  175

9.5.4 用自定義的散列錶進行散列  176

9.6 斯特潘諾夫的抽象懲罰  177

9.7 使用C++標準庫優化排序  178

9.8 小結  179

第10章 優化數據結構  181

10.1 理解標準庫容器  181

10.1.1 序列容器  182

10.1.2 關聯容器  182

10.1.3 測試標準庫容器  183

10.2 std::vector與std::string  187

10.2.1 重新分配的性能影響  188

10.2.2 std::vector中的插入與刪除  188

10.2.3 遍曆std::vector  190

10.2.4 對std::vector排序  191

10.2.5 查找std::vector  191

10.3 std::deque  191

10.3.1 std::deque中的插入和刪除  193

10.3.2 遍曆std::deque  194

10.3.3 對std::deque 的排序  194

10.3.4 查找std::deque  194

10.4 std::list  194

10.4.1 std::list中的插入和刪除  196

10.4.2 遍曆std::list中  197

10.4.3 對std::list排序  197

10.4.4 查找std::list  197

10.5 std::forward_list  198

10.5.1 std::forward_list中的插入和刪除  199

10.5.2 遍曆std::forward_list  199

10.5.3 對std::forward_list排序  199

10.5.4 查找std::forward_list  199

10.6 std::map與std::multimap  199

10.6.1 std::map中的插入和刪除  200

10.6.2 遍曆std::map  202

10.6.3 對std::map排序  202

10.6.4 查找std::map  203

10.7 std::set與std::multiset  203

10.8 std::unordered_map與std::unordered_multimap  204

10.8.1 std::unordered_map中的插入與刪除  206

10.8.2 遍曆std::unordered_map  207

10.8.3 查找std::unordered_map  207

10.9 其他數據結構  208

10.10 小結  209

第11章 優化I/O  210

11.1 讀取文件的秘訣  210

11.1.1 創建一個吝嗇的函數簽名  211

11.1.2 縮短調用鏈  213

11.1.3 減少重新分配  213

11.1.4 更大的吞吐量——使用更大的輸入緩衝區  215

11.1.5 更大的吞吐量——一次讀取一行  216

11.1.6 再次縮短函數調用鏈  217

11.1.7 無用的技巧  218

11.2 寫文件  219

11.3 從std::cin讀取和嚮std::cout中寫入  220

11.4 小結  220

第12章 優化並發  221

12.1 復習並發  222

12.1.1 並發概述  222

12.1.2 交叉執行  226

12.1.3 順序一緻性  226

12.1.4 競爭  227

12.1.5 同步  228

12.1.6 原子性  228

12.2 復習C++並發方式  230

12.2.1 綫程  230

12.2.2 promise和future  231

12.2.3 異步任務  233

12.2.4 互斥量  234

12.2.5 鎖  235

12.2.6 條件變量  236

12.2.7 共享變量上的原子操作  238

12.2.8 展望未來的C++並發特性  240

12.3 優化多綫程C++程序  241

12.3.1 用std::async替代std::thread  242

12.3.2 創建與核心數量一樣多的可執行綫程  243

12.3.3 實現任務隊列和綫程池  244

12.3.4 在單獨的綫程中執 C++性能優化指南 下載 mobi epub pdf txt 電子書 格式


C++性能優化指南 mobi 下載 pdf 下載 pub 下載 txt 電子書 下載 2024

C++性能優化指南 下載 mobi pdf epub txt 電子書 格式 2024

C++性能優化指南 下載 mobi epub pdf 電子書
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!

用戶評價

評分

此用戶未及時填寫評價內容,係統默認好評!

評分

翻瞭幾頁,感覺講的不錯,不愧為經典

評分

書是正版,包裝完好,好好學習學習。

評分

送貨很快,物品沒有任何毀壞的地方,很滿意

評分

書不錯,挺咯遇見最可惡圖咯遇見一

評分

一直在京東購物,放心,省心,安心!會一如既往的支持!

評分

C++性能調優實踐指南,精選工作中頻繁使用和能夠帶來顯著性能提升效果的技術

評分

送貨很快,價格也適閤,沒有破損

評分

看瞭一部分,應該不錯哦

類似圖書 點擊查看全場最低價

C++性能優化指南 mobi epub pdf txt 電子書 格式下載 2024


分享鏈接




相關圖書


本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

友情鏈接

© 2024 book.teaonline.club All Rights Reserved. 圖書大百科 版權所有