中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 業(yè)界動(dòng)態(tài) > 專業(yè)書訊 > 《代碼優(yōu)化:有效使用內(nèi)存》
《精通Eclipse》 回到列表 《網(wǎng)絡(luò)安全概論》
 《代碼優(yōu)化:有效使用內(nèi)存》

作者:博文視點(diǎn) 時(shí)間: 2004-11-02 文檔類型:原創(chuàng) 來自:藍(lán)色理想

《代碼優(yōu)化:有效使用內(nèi)存(含光盤1張)》

作者:[美]Kris Kaspersky
譯者:譚明金
定價(jià):48.00
頁碼:330
開本:短16開
出版時(shí)間:2004-10-01

 
  本書系統(tǒng)深入地介紹了各種代碼優(yōu)化編程技術(shù)。全書分為4章。第1章集中介紹如何確定程序中消耗CPU時(shí)鐘最多的熱點(diǎn)代碼,即有關(guān)所謂程序剖分技術(shù),以及典型剖分工具的實(shí)用知識(shí)。第2、3章分別全面介紹RAM子系統(tǒng)與高速緩存子系統(tǒng)的代碼優(yōu)化知識(shí)。第4章主要介紹機(jī)器代碼優(yōu)化技術(shù)。各章在討論基本原理的同時(shí),詳細(xì)給出了典型的代碼實(shí)例,并對(duì)優(yōu)化性能進(jìn)行了定量的分析。
  該書特別適合于作為應(yīng)用程序員及系統(tǒng)程序員的學(xué)習(xí)與開發(fā)之用。同時(shí),本書對(duì)在硬件方面的專業(yè)人員與技術(shù)工作者有一定的參考價(jià)值。

目錄
第1章 程序剖分 1
1.1 剖分的目標(biāo)與目的 2
1.1.1 總執(zhí)行時(shí)間 2
1.1.2 執(zhí)行時(shí)間的類型 5
1.1.3 處罰信息 7
1.1.4 調(diào)用次數(shù) 10
1.1.5 覆蓋層次 11
1.2 微剖分的基本問題 12
1.2.1 流水作業(yè)或者吞吐量與等待時(shí)間 12
1.2.2 測不準(zhǔn) 13
1.2.3 硬件優(yōu)化 17
1.2.4 低分辨率 17
1.3 宏剖分的基本問題 18
1.3.1 運(yùn)行時(shí)間的不一致性 18
1.3.2 二度運(yùn)行問題 21
1.3.3 負(fù)面效應(yīng) 22
1.3.4 單臺(tái)機(jī)器的代碼優(yōu)化問題 24
1.4 最新剖分軟件概述 24
1.4.1 Intel VTune 25
1.4.2 AMD Code Analyst 26
1.4.3 Microsoft的profile.exe 27
1.5 開發(fā)自己的剖分軟件 28
1.6 VTune實(shí)用剖分知識(shí) 28
1.6.1 第一步:刪除printf函數(shù) 36
1.6.2 第二步:將strlen函數(shù)體移出循環(huán) 36
1.6.3 第三步:對(duì)齊數(shù)據(jù) 38
1.6.4 第四步:刪除strlen函數(shù) 41
1.6.5 第五步:刪除除法操作 42
1.6.6 第六步:刪除性能監(jiān)測代碼 43
1.6.7 第七步:函數(shù)組合 43
1.6.8 第八步:減少內(nèi)存訪問操作的次數(shù) 44
1.6.9 第九步:把VTune當(dāng)做私人教練 47
1.6.10 第十步:下結(jié)論 53
1.6.11 結(jié)果與預(yù)測 57
第2章 RAM子系統(tǒng) 59
2.1 RAM概述 59
2.2 RAM的層次結(jié)構(gòu) 60
2.3 隨機(jī)存取存儲(chǔ)器 63
2.4 RAM的設(shè)計(jì)與工作原理 64
2.4.1 內(nèi)核部分 64
2.4.2 傳統(tǒng)DRAM(頁面模式的DRAM) 66
2.4.3 DRAM的發(fā)展 68
2.4.4 快速頁面模式的DRAM(FPM DRAM) 68
2.4.5 存儲(chǔ)器時(shí)序 69
2.4.6 擴(kuò)展數(shù)據(jù)輸出DRAM(EDO DRAM) 70
2.4.7 突發(fā)式EDO DRAM(BEDO DRAM) 70
2.4.8 同步DRAM(SDRAM) 72
2.4.9 倍速SDRAM(DDR SDRAM)或者SDRAM II 73
2.4.10 直接Rambus DRAM(直接RDRAM) 73
2.4.11 不同存儲(chǔ)器類型的比較 75
2.5 存儲(chǔ)器與處理器之間的交互操作 76
2.5.1 計(jì)算全存取時(shí)間 81
2.6 DRAM物理地址到邏輯地址的映射 83
2.7 內(nèi)存優(yōu)化操作 84
2.7.1 建議 85
2.7.2 展開循環(huán) 86
2.7.3  消除數(shù)據(jù)相關(guān)性 91
2.7.4  數(shù)據(jù)并行處理 94
2.7.5  優(yōu)化引用數(shù)據(jù)結(jié)構(gòu) 96
2.7.6 減小數(shù)據(jù)結(jié)構(gòu)的尺寸 100
2.7.7 DRAM板塊上的數(shù)據(jù)分布策略 109
2.7.8 規(guī)劃數(shù)據(jù)流 115
2.7.9 按字節(jié)、雙字與四字進(jìn)行內(nèi)存處理 121
2.7.10 數(shù)據(jù)對(duì)齊 123
2.7.11 內(nèi)存訪問與計(jì)算的組合 132
2.7.12 讀寫操作的組合 135
2.7.13 只在必要時(shí)才訪問內(nèi)存 136
2.7.14 內(nèi)置C內(nèi)存處理函數(shù)的優(yōu)化 137
2.7.15 內(nèi)存處理函數(shù)的優(yōu)化質(zhì)量 150
2.7.16 C字符串庫函數(shù)的優(yōu)化 152
2.7.17 字符串處理函數(shù)的質(zhì)量優(yōu)化 156
2.7.18 塊處理算法的優(yōu)化 157
2.7.19 大型數(shù)組排序的優(yōu)化 160
2.8 RAM測試問題 165
第3章 高速緩存子系統(tǒng) 168
3.1 SRAM的工作原理 168
3.1.1 歷史概況 169
3.1.2 內(nèi)核 169
3.1.3 觸發(fā)器的設(shè)計(jì) 169
3.1.4 邏輯非元件(取反器)的設(shè)計(jì) 170
3.1.5 SRAM陣列的設(shè)計(jì) 171
3.1.6 封裝接口的設(shè)計(jì) 172
3.1.7 讀寫時(shí)序圖 173
3.1.8 靜態(tài)存儲(chǔ)器的類型 175
3.2 高速緩存的工作原理 175
3.2.1 起源 176
3.2.2 高速緩存的目標(biāo)與任務(wù) 176
3.2.3 高速緩存的組織 179
3.3 高速緩存與存儲(chǔ)器存取的優(yōu)化 196
3.3.1 處理數(shù)據(jù)的尺寸對(duì)性能的影響 196
3.3.2 可執(zhí)行代碼的尺寸對(duì)性能的影響 209
3.3.3 數(shù)據(jù)對(duì)齊效率 213
3.3.4 數(shù)據(jù)在高速緩存板塊上的分布 220
3.3.5 使用有限聯(lián)合數(shù)目的高速緩存 226
3.3.6 二維數(shù)組的處理 231
3.3.7 寫緩沖機(jī)制的詳細(xì)說明 234
3.3.8 新一代x86處理器的高速緩存管理 250
3.3.9 預(yù)取機(jī)制的實(shí)際應(yīng)用 256
3.3.10 內(nèi)存拷貝內(nèi)幕或者Pentium III與Pentium 4的新命令 275
第4章 機(jī)器優(yōu)化 292
4.1 C/C++編譯器的比較分析 292
4.1.1 常量表達(dá)式 294
4.1.2 代數(shù)表達(dá)式 296
4.1.3 算術(shù)運(yùn)算 300
4.1.4 分支語句 302
4.1.5 switch運(yùn)算符 304
4.1.6 循環(huán) 307
4.1.7 函數(shù)調(diào)用 311
4.1.8 變量分布 312
4.1.9 字符串初始化 312
4.1.10 死碼 312
4.1.11 常量條件 313
4.1.12 確定優(yōu)勝者 313
4.2 匯編器與編譯器的對(duì)決 313
4.2.1 歷史回顧——匯編語言使春天永駐 314
4.2.2 評(píng)價(jià)機(jī)器優(yōu)化質(zhì)量的指標(biāo) 315
4.2.3 評(píng)價(jià)機(jī)器優(yōu)化質(zhì)量的方法 316
4.2.4 對(duì)主要編譯器進(jìn)行比較分析 317
4.2.5 測試結(jié)果的討論 318
4.2.6 機(jī)器優(yōu)化質(zhì)量的示例 321
4.2.7 用匯編語言創(chuàng)建保護(hù)代碼 325
4.2.8 用匯編語言編程是一種創(chuàng)造性活動(dòng) 326
4.2.9 結(jié)束語 326
4.2.10 源代碼 327


前言
優(yōu)化概述
0.1 優(yōu)化的好處
  現(xiàn)在還值得在優(yōu)化問題上花時(shí)間嗎?集中精力學(xué)習(xí)MFC或者.NET技術(shù)不是更好嗎?現(xiàn)代計(jì)算機(jī)的性能不是如此強(qiáng)大甚至連最新操作系統(tǒng),如Windows XP都不能使它慢下來嗎?
  新一代程序員一直對(duì)優(yōu)化心存疑慮。不過,從一個(gè)極端走到另一個(gè)極端,并非明智之舉。即使最先進(jìn)的處理器也沒有強(qiáng)大到足以應(yīng)付所有的任務(wù)。如果將它們難以完成的任務(wù)羅列出來,得到的仍然是一個(gè)長長的列表:現(xiàn)實(shí)世界中各種各樣的物理過程建模、多媒體信息處理、文字識(shí)別,等等。哪怕是開發(fā)一個(gè)高效的數(shù)據(jù)壓縮程序也會(huì)面臨很多挑戰(zhàn)。
  處理器的性能的確在快速地提升,然而,PC用戶對(duì)處理器性能的需求增長,也是并駕齊驅(qū)的。與早些時(shí)候人們情愿啟動(dòng)程序后等待它的運(yùn)行這種數(shù)據(jù)處理情形不同的是,現(xiàn)在,大多數(shù)用戶希望所有的操作能夠立即完成或者在幾分鐘內(nèi)完成,并且數(shù)據(jù)處理量也大大增加了。目前,文件的大小動(dòng)不動(dòng)就超過了幾百兆字節(jié)。曾記否,整個(gè)硬盤容量尚不及現(xiàn)在硬盤容量的十分之一的那個(gè)時(shí)代?
  有什么樣的目標(biāo)就有什么樣的手段去達(dá)到目標(biāo)。這種理念決定了本書敘述的方向。因此,讀者應(yīng)將如下的一些建議用于后面的所有優(yōu)化算法當(dāng)中去:
1.優(yōu)化應(yīng)該盡可能保持與硬件無關(guān),并且對(duì)于其他操作系統(tǒng),是可移植的,而不需要另外的付出或者導(dǎo)致效率的大幅度降低。換句話說,在程序中使用內(nèi)聯(lián)匯編語言函數(shù)基本上是不可以接受的。最好避免使用那些只有特定編譯器才具備的非標(biāo)準(zhǔn)或者擴(kuò)展語言能力。
2.優(yōu)化不應(yīng)該使開發(fā)過程(包括測試在內(nèi))的勞動(dòng)強(qiáng)度增加15%以上。比較理想的情況是,所有關(guān)鍵算法都應(yīng)該以獨(dú)立庫的形式來實(shí)現(xiàn),因?yàn)楠?dú)立庫是不需要予以另外處理的。
3.優(yōu)化算法應(yīng)該使程序性能的提高不少于20%。本書很少去考慮那些使程序性能提高不足20%的優(yōu)化方法。全書關(guān)注的焦點(diǎn)集中在不需要程序員額外付出就可以使程序性能至少加倍的算法上。盡管似乎顯得有點(diǎn)不可信,但這樣的算法確實(shí)存在!
4.優(yōu)化應(yīng)該使代碼修改起來毫不費(fèi)力。許多優(yōu)化技巧可能會(huì)“殺死”程序,因?yàn)榧词挂粋(gè)細(xì)微的修改都可能使優(yōu)化喪失效能。所有變量都可以在寄存器之間進(jìn)行仔細(xì)的分配,微代碼可以實(shí)現(xiàn)并行化,任何能夠發(fā)揮作用的特性都可以使用。但這些措施并不能彌補(bǔ)代碼在靈活性方面出現(xiàn)的損失。這類程序的執(zhí)行速度甚至連一個(gè)時(shí)鐘周期都不能提高,代碼的尺寸也不能哪怕減少一個(gè)字節(jié)。因此,本書將僅僅討論那些對(duì)更改程序結(jié)構(gòu)所引入的變化并不敏感的優(yōu)化方法。
  這里要試圖證實(shí)的關(guān)鍵概念是:普遍認(rèn)定的購買更新與性能更強(qiáng)的處理器比在優(yōu)化方面花費(fèi)時(shí)間與精力要好的看法是不對(duì)的。此外,優(yōu)化并不像大多數(shù)人想像的那樣費(fèi)勁。例如,本書提供的許多通用方法就不需要對(duì)每個(gè)任務(wù)進(jìn)行單獨(dú)調(diào)整。書中力圖描述一些在系統(tǒng)層次具有可移植性的優(yōu)化技術(shù),從而避免在沒有特殊需要的情況下使用匯編語言。當(dāng)然,絕對(duì)不使用匯編語言也是不可能做什么事情的,特別是在討論剖分(profiling)技術(shù)及機(jī)器優(yōu)化算法的章節(jié)中更是這樣。不過,作者希望貫穿代碼的全部注釋會(huì)使有匯編語言的地方更容易理解,即使對(duì)于沒有匯編語言編程經(jīng)驗(yàn)的讀者來說也是如此。
0.2 讀者對(duì)象
  本書描述了計(jì)算機(jī)的各組件之間的交互組織、體系與機(jī)制。本書著重從機(jī)器代碼與數(shù)據(jù)結(jié)構(gòu)的層次上,講述了如何進(jìn)行高效編程,以及各種代碼優(yōu)化技術(shù)。
  該書是為在C/C++語言編程方面具有一定經(jīng)驗(yàn)的應(yīng)用程序開發(fā)者寫的,同時(shí)也是為具有一些匯編語言知識(shí)的系統(tǒng)程序開發(fā)人員寫的。不過,書中描述的優(yōu)化方法并不局限于任何一種高級(jí)編程語言。因此,具備C語言知識(shí)僅僅對(duì)于理解書中給出的源代碼是必要的。
  當(dāng)然,作者也希望本書能夠?yàn)橛?jì)算機(jī)硬件開發(fā)的專業(yè)人員與技術(shù)工作者帶來一些幫助。本書盡可能詳細(xì)地描述硬件的操作原理,并且討論在最常用的計(jì)算機(jī)組件中存在的瓶頸。
  書中提供的絕大多數(shù)素材都是以作者的經(jīng)驗(yàn)為基礎(chǔ)的。所有信息都經(jīng)過了仔細(xì)的測試與驗(yàn)證。盡管如此,仍然不能保證書中沒有錯(cuò)誤。(畢竟,“漏洞總是競相出現(xiàn)的”。)
  本書的素材主要適用于AMD Athlon以及Intel Pentium II、Pentium III與 Pentium 4微處理器。較早的處理器只是在必要的時(shí)候才提到并加以考慮。
0.3 優(yōu)化基礎(chǔ)
  程序員(即使是訓(xùn)練有素的程序員)都免不了經(jīng)常不假思索地去與有問題的匯編語言函數(shù)較勁。這不是正確的因應(yīng)之道!正如第4章將要展示的那樣,在大多數(shù)情況下,機(jī)器優(yōu)化與手工優(yōu)化之間的差異是可以忽略不計(jì)的。除了修飾部分以外,程序通常并沒有什么可以優(yōu)化與提高的。在通常情況下,編譯器會(huì)給出一個(gè)較為理想的結(jié)果,因而只做出一點(diǎn)努力并不能使程序的性能提高幾個(gè)百分點(diǎn)。如果僅僅是在改寫一個(gè)或者多個(gè)匯編語言函數(shù)之后,程序的性能才稍有改善的話,那將是非常不幸的事情。時(shí)間與精力都浪費(fèi)掉了,而得到的只是一個(gè)遺憾。
  因此,在進(jìn)行手工優(yōu)化之前,有必要確定編譯器生成的代碼是否真的沒有經(jīng)過優(yōu)化,以及能夠進(jìn)行何種程度的優(yōu)化。同樣,對(duì)現(xiàn)有的潛在性能進(jìn)行評(píng)估也很有好處。不過,走另一個(gè)極端而認(rèn)定編譯器總是生成優(yōu)化代碼也是不明智的。所有一切取決于實(shí)現(xiàn)的處理算法與高級(jí)編程語言上下文環(huán)境之間的對(duì)應(yīng)關(guān)系如何。有些要用一系列C或者Pascal語言操作符才能實(shí)現(xiàn)的任務(wù)可以通過單條機(jī)器指令來完成。認(rèn)為編譯器會(huì)用適當(dāng)?shù)臋C(jī)器命令取代這組指令,未免顯得天真。(與此不同,編譯器把每條指令編譯成一條或者多條機(jī)器指令。)
  可見,對(duì)代碼進(jìn)行優(yōu)化處理時(shí),需要考慮一些基本的優(yōu)化規(guī)則。
規(guī)則一
  在進(jìn)行代碼優(yōu)化之前,先要有一個(gè)同一代碼的可靠的、非優(yōu)化的版本。這意味著,在開始優(yōu)化代碼之前,一定要確保程序能夠正確地運(yùn)行。
  在軟件開發(fā)過程中是不可能生成優(yōu)化代碼的,這樣做會(huì)實(shí)實(shí)在在地影響指令的設(shè)計(jì)。即使僅僅在算法中引入一點(diǎn)點(diǎn)變化,也幾乎總會(huì)導(dǎo)致對(duì)代碼進(jìn)行徹底的修改。因此,在確信用高級(jí)編程語言實(shí)現(xiàn)的算法能夠正確運(yùn)行之前,切不可啟動(dòng)代碼優(yōu)化過程。并且,如果發(fā)現(xiàn)軟件的某個(gè)地方存在漏洞,那么第一個(gè)要懷疑的部分就是經(jīng)過優(yōu)化的代碼片斷。(經(jīng)過優(yōu)化的代碼基本上不具備可讀性,并且不可理解,而調(diào)試這樣的代碼會(huì)是一個(gè)繁復(fù)冗長的過程。)一個(gè)沒有優(yōu)化但經(jīng)過了仔細(xì)調(diào)試的代碼版本會(huì)很有幫助:如果用非優(yōu)化代碼取代優(yōu)化代碼而沒有產(chǎn)生新的錯(cuò)誤,那么意味著軟件bug存在于優(yōu)化代碼之中。假如這樣做之后,錯(cuò)誤依然存在,則需要在其他地方去尋找bug。
規(guī)則二
  應(yīng)利用算法優(yōu)化措施,而不是通過提升系統(tǒng)特性來獲取最大限度的性能提升。沒有什么優(yōu)化措施可以極大地提高諸如冒泡排序或者線性搜索之類的算法的效率。正確的指令規(guī)劃及其他的程序設(shè)計(jì)技巧最多能將程序的性能提高幾個(gè)百分點(diǎn)。與此不同,實(shí)現(xiàn)一個(gè)快速排序和折半查找算法會(huì)至少將程序的速度提高10 倍,而不管源代碼寫得粗糙與否。因此,如果程序運(yùn)行速度顯得太慢,應(yīng)該盡量使用更加高效的算法,而不是去優(yōu)化一個(gè)效率低下的算法。
規(guī)則三
  不要將代碼優(yōu)化與匯編語言實(shí)現(xiàn)混為一談。如果在剖分階段檢測到了程序中的熱點(diǎn)(hotspot),并不要急于將它們用匯編語言進(jìn)行重寫。首先要做的是盡量在高級(jí)程序設(shè)計(jì)語言中采取各種可能的步驟:刪除消耗資源的算術(shù)運(yùn)算(特別是除法與余數(shù)計(jì)算);最大限度地減少分支的數(shù)目;用數(shù)目更小的迭代操作(譯者注:循環(huán)語言結(jié)構(gòu)中重復(fù)執(zhí)行的循環(huán)體部分稱為迭代操作,這部分代碼執(zhí)行一次成為一次迭代)替換循環(huán),等等。在極端情況下,試著換用別的編譯器。(不同編譯器的代碼編譯質(zhì)量往往存在很大的差異。)
規(guī)則四
  在試圖用匯編語言重寫程序之前,先查看一下編譯器生成的匯編代碼并估算它的效率。也許,程序性能差不是編譯器的責(zé)任,可能是由處理器或者內(nèi)存子系統(tǒng)引起的。對(duì)于要進(jìn)行大量計(jì)算的科技應(yīng)用程序和需要海量內(nèi)存的圖形軟件來說,情況尤其如此。簡單地將程序轉(zhuǎn)換為匯編語言,并不能提高內(nèi)存子系統(tǒng)的吞吐量或者使處理器的運(yùn)算執(zhí)行得更快。首先,通過編譯器生成代碼的匯編語言列表(例如,對(duì)于Microsoft Visual C++編譯器來說,使用/FA命令行選項(xiàng)就可以達(dá)到目的)。然后,掃描列表,找出其中諸如MOV EAX,[EBX] \MOV [EBX], EAX之類的嚴(yán)重錯(cuò)誤。原則上,改善由編譯器生成的代碼的性能將比從零開始用匯編語言實(shí)現(xiàn)要容易得多。因?yàn)榍罢咝枰臅r(shí)間要少得多,而得到的結(jié)果卻可能相差無幾。
規(guī)則五
  如果編譯器生成的匯編語言列表雖然顯得很不錯(cuò),但是程序運(yùn)行起來仍然很慢,就可以考慮將它加載到一個(gè)反匯編工具之中去。在這里可能發(fā)現(xiàn)很多東西,比如,編譯器對(duì)跳轉(zhuǎn)指令的存放位置的定位是不準(zhǔn)確的,從而可能沒有合適地定位跳轉(zhuǎn)指令。通過其倍數(shù)為16的地址來對(duì)齊跳轉(zhuǎn)指令可以得到最好的性能。將整個(gè)循環(huán)體放在一個(gè)高速緩存行(cache line)(也就是32個(gè)字節(jié))中,甚至可以得到更好的結(jié)果。不過,這說得太遠(yuǎn)了點(diǎn)。機(jī)器代碼優(yōu)化手段是另外一個(gè)不同的主題。我能夠給出的最好建議是,不妨去仔細(xì)研究一下由頂尖處理器制造商(Intel與AMD)發(fā)布的文檔資料。
規(guī)則六
  如果可用的處理器指令能夠?qū)崿F(xiàn)比較高效的算法,那么就用不著去管編譯器而可以著手去實(shí)現(xiàn)匯編語言代碼。不過,這種情況是很少見的。再說,我們不是生活在荒島之上。經(jīng)過了仔細(xì)調(diào)試并且性能很好的可用高度優(yōu)化代碼庫文件,不下幾噸重。如果能夠買到一個(gè)庫文件,那么自己為什么還要去重新開發(fā)呢?
規(guī)則七
  在開發(fā)匯編語言代碼時(shí),不管存在什么樣的干擾,都應(yīng)該給出一個(gè)精巧而高效的方案。是的,確實(shí)存在一些沒有公布的性能、不尋常的樣式及其他的訣竅。然而,這些方法的任何一種都不是可移植的、與處理問題無關(guān)的或者每個(gè)人都清楚的。(老實(shí)說,誰能夠輕而易舉地弄明白自己十年前編寫的源代碼呢?)我曾經(jīng)不止一次因?yàn)槭褂米约阂酝眠^的訣竅而搬起石頭砸自己的腳。其中,最令人痛苦的事情是,用到的這些訣竅通常并不是必需的;使用它們純粹是因?yàn)橐奥兑皇帧?梢,不要忽視?duì)程序進(jìn)行注釋,并且應(yīng)該將所有的匯編函數(shù)存放在一個(gè)單獨(dú)的模塊之中。在程序代碼中要避免使用內(nèi)聯(lián)匯編函數(shù):這些函數(shù)很少是可移植的,并且在移植到其他平臺(tái)或者編譯器以后經(jīng)常會(huì)帶來負(fù)面效果。
  匯編語言技巧僅僅用在軟件版權(quán)保護(hù)方面才是合理的。不過,這又是另外一個(gè)顯得非常不同的討論話題。
0.4 常見的謬誤
  關(guān)于優(yōu)化方面的錯(cuò)誤說法為數(shù)不少。雖然專業(yè)人員大多會(huì)對(duì)此一笑了之,但是這些說法會(huì)對(duì)新手造成不利的影響。本節(jié)將揭示其中的幾個(gè)訛傳。
訛傳1
  編譯器會(huì)替用戶完成所有的優(yōu)化任務(wù)。
  認(rèn)為編譯器具有超凡脫俗的能力是毫無根據(jù)的。即使是一個(gè)具有強(qiáng)大的優(yōu)化能力的編譯器,也僅僅能夠?qū)υO(shè)計(jì)良好的代碼進(jìn)行高效的轉(zhuǎn)化。如果源代碼殘缺不全,沒有什么編譯器可以更正它的錯(cuò)誤?梢,不應(yīng)該將所有與性能和效率有關(guān)的任務(wù)都交給編譯器去做!一個(gè)比較好的做法是協(xié)助編譯器去完成這些任務(wù)。達(dá)到此種目的的具體方法需要單獨(dú)加以討論,這方面的內(nèi)容可以在第4章中找到。
訛傳2
  最大限度的效率只有在單純使用匯編語言編程時(shí)才可以得到,用高級(jí)語言編程是不可能得到這樣的結(jié)果的。
  將程序代碼改為匯編指令,很少可以提高程序的性能。用手工優(yōu)化方式轉(zhuǎn)化高質(zhì)量的源代碼所得到的結(jié)果,在性能上只比由優(yōu)化編譯器給出的結(jié)果好10%~20%。這個(gè)差異雖然是很大的,但是它并沒有大到足以消除單純使用匯編語言進(jìn)行程序設(shè)計(jì)所帶來的困難與工作強(qiáng)度。
  第4章提供了這個(gè)方面的詳細(xì)內(nèi)容,其中包括機(jī)器優(yōu)化與手工優(yōu)化質(zhì)量的比較。
訛傳3
  與優(yōu)化編譯器不同,人不可能利用處理器體系方面的所有性能。
  僅僅只有Intel開發(fā)的編譯器才能夠生成處理器微體系結(jié)構(gòu)認(rèn)為具有優(yōu)化性質(zhì)的代碼。第1章(見“VTune實(shí)用剖分知識(shí)”一節(jié))將給出這方面的實(shí)際例子。
  盡管如此,最新的處理器其實(shí)能夠優(yōu)化被傳遞過來要它進(jìn)行處理的代碼。進(jìn)行手工優(yōu)化的企圖容易遭到失敗:沒有什么代碼對(duì)于現(xiàn)有的處理器體系結(jié)構(gòu)來說是優(yōu)化的,諸如PII、P4、AMD-K6與Athlon之類的處理器所具有的特性相互之間存在迥然的不同。
  這方面的例外情形體現(xiàn)在對(duì)性能具有苛刻要求的小范圍內(nèi)的特定任務(wù)(諸如破譯口令字)上。在這些例外當(dāng)中,手工優(yōu)化被證明是行之有效的,由此得到的結(jié)果比任何編譯器都好。
訛傳4
  x86處理器不值得使用,要理解什么是真正的性能就必須使用PowerPC。
  每種處理器體系結(jié)構(gòu)都有自己的優(yōu)點(diǎn)與不足。我雖然沒有優(yōu)化過要在PowerPC上運(yùn)行的任何代碼,但我有幾個(gè)熟人在從事用于PowerPC的優(yōu)化編譯器的開發(fā),他們對(duì)其中的一些“特性”感到很失望。
  x86處理器系列同樣具有許多限制與問題。不過,這不能成為程序員編寫粗糙的代碼而不去改進(jìn)它的借口。
  到目前為止,該處理器系列擁有最為復(fù)雜的指令系統(tǒng)之一,它為系統(tǒng)程序員提供了幾乎不受限制的編程能力。應(yīng)用程序員甚至想像不出編譯器從他們那里剽竊到了哪些經(jīng)驗(yàn)!



譯者序

  時(shí)間就是金錢,效率就是生命。這句名言對(duì)于程序,尤其是性能至關(guān)重要的程序來說,同樣一點(diǎn)都不顯過分。如何獲取良好的程序運(yùn)行性能,就是代碼優(yōu)化的研究內(nèi)容。
  代碼優(yōu)化對(duì)于許多程序員而言顯得有點(diǎn)神秘,這是由于它涉及軟件算法與硬件體系結(jié)構(gòu)等方面的深層知識(shí)。對(duì)于希望掌握代碼優(yōu)化技術(shù)的計(jì)算機(jī)從業(yè)人員來說,要揭開代碼優(yōu)化技術(shù)神秘面紗的一條捷徑是:閱讀一本介紹代碼優(yōu)化技術(shù)的好書。Kris Kaspersky撰寫的《代碼優(yōu)化:有效使用內(nèi)存》一書就是這樣一本好書。我無意在此為該書做免費(fèi)的廣告(盡管向讀者推薦高質(zhì)量的書籍也是作者或者譯者應(yīng)盡的責(zé)任和義務(wù)),說它好是由書的內(nèi)容決定的(當(dāng)然,是否真好最終要由讀者來評(píng)判,但我相信讀者在仔細(xì)閱讀并理解了書中的內(nèi)容之后,定會(huì)認(rèn)為吾言不虛)。
  本書系統(tǒng)地介紹了各種代碼優(yōu)化編程知識(shí),其內(nèi)容涵蓋關(guān)于如何確定程序中消耗CPU時(shí)鐘最多的熱點(diǎn)代碼的所謂程序剖分技術(shù)與典型剖分工具的實(shí)用知識(shí),RAM子系統(tǒng)與高速緩存子系統(tǒng)的工作原理與代碼優(yōu)化知識(shí),以及機(jī)器代碼優(yōu)化技術(shù)等。該書在透徹介紹各種優(yōu)化技術(shù)原理時(shí),詳細(xì)給出了典型的代碼實(shí)例,對(duì)性能進(jìn)行了定量分析。特別是,全書針對(duì)各種優(yōu)化方式的有利與不利之處進(jìn)行了細(xì)致入微的對(duì)比分析,使讀者可以輕松地選用滿足自己應(yīng)用需要的優(yōu)化機(jī)制。實(shí)用、深入、系統(tǒng)與有效是本書在寫作上的一大特色。
  當(dāng)然,本書的質(zhì)量是由作者在該領(lǐng)域很高的學(xué)術(shù)造詣、豐富的開發(fā)經(jīng)驗(yàn)及長期的寫作經(jīng)歷等多方面的因素來保證的。Kris Kaspersky是一位技術(shù)撰稿人,其文章涉及黑客、反匯編與代碼優(yōu)化技術(shù)的各個(gè)方面,同時(shí)他還是《黑客反匯編揭秘》一書的作者。長期以來,他一直致力于研究與安全和系統(tǒng)程序開發(fā)有關(guān)的許多課題,這包括編譯器開發(fā)、優(yōu)化技術(shù)、安全機(jī)制研究、實(shí)時(shí)操作系統(tǒng)內(nèi)核的創(chuàng)建與反病毒程序的生成等。
  本書的翻譯得到王璐、沈鑫剡、胡勇強(qiáng)、伍紅兵、龍瑞、魏濤、汪東、張斌、李炎新等同志的大力協(xié)作與幫助,在此一并致謝。
  由于代碼優(yōu)化涉及的內(nèi)容十分豐富,相關(guān)知識(shí)的層次比較深,加之譯者水平有限,譯文中必定存在疏漏和不當(dāng)之處,請(qǐng)讀者不吝賜教。

譯者

出處:藍(lán)色理想
責(zé)任編輯:donger

相關(guān)文章
《精通Eclipse》
《Word排版藝術(shù)》
《過河卒》出版一周年回顧
了解Borland—《Borland 傳奇》
作者文章 更多作者文章
《精通Eclipse》
《代碼優(yōu)化:有效使用內(nèi)存》
《網(wǎng)絡(luò)安全概論》
《Word排版藝術(shù)》
BIOS、注冊(cè)表與系統(tǒng)漏洞終極解析
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
《YoungNWP》第3期發(fā)布
奧斯卡大師亞洲巡講火熱報(bào)名中
Internet Explorer 9 平臺(tái)預(yù)覽版4
國內(nèi)最大規(guī)模web前端技術(shù)聚會(huì)深圳站
綠色I(xiàn)T--云計(jì)算真的環(huán)保嗎?
妙手回春:網(wǎng)站可用性測試及優(yōu)化指南
Phpcms 2010模板大賽火熱開賽
水晶石技法西安特訓(xùn)營系列報(bào)道
插畫中國56期插畫培訓(xùn)火爆招生中
喬家大院里的女人與Photoshop創(chuàng)意設(shè)計(jì)

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2