對《深刻理解計算機系統》(CSAPP)慕名已久,主要在於聽說這本書儘可能的作到相對實用,不去講那些和實際編程沒多大關係的計算機原理(畢竟是著名計算 機院校裏面最偏軟件的CMU的做品),重點很是明確,像我這種沒有本科科班出身又不想去死讀些不知道之後有沒有用的東西的人來講,最是適合了。感興趣的東西就能夠再加深,不興趣的就算了。程序員
書的確是可貴的書。我第一次試圖讀這本書是幾個月之前,當時第2章「信息的表示和處理」沒看完就放下了,以爲講了一大堆數字表達方式很沒意思……此次 稍微堅持了一下,沒想到就一口氣讀下來了…… 編程
重點推薦第3章「程序的機器級表示」、第5章「優化程序性能」、第6章「存儲器層次結構」、第10章「虛擬存儲器」。以爲這四章乃是全書之精華,看得人慾罷不能。 緩存
「程序的機器級表示」一章幾乎是一種教授逆向工程的方法在講授,剖析編譯器產生的彙編代碼,以此來加深對具體代碼實現的理解。大量的習題都是根據彙編 來猜源程序是什麼,有趣極了。這一章還覆蓋了緩衝區攻擊——可是這點講得太少了,不解渴,有時間本身弄弄……
講底層離不了彙編這個有點棘手的東西,我還一度擔憂本身彙編學得不太過關,會碰到障礙。但這裏做者提出一個很實際的要求:之前要求程序員都會寫匯 編, 如今要求程序員都會讀彙編。這裏以一種「讀」的方式教人用匯編,不侷限於不少細小的語法,讓僅僅懂得C的程序員也毫無障礙。僅僅100多頁,不只初步講了 彙編的語法和使用,還配合大量的例子分析來解讀產生的彙編代碼,讓人理解深入,實在是技高一籌。 性能
「優化程序性能」是全書最閃光的章節。做者對一個例子不斷優化,講循環效率和過程調用,到講存儲器引用,一直講到現代處理器的結構,講到IA32 處理 器的侷限,一路下來,暢快淋漓。還將IA32處理器的優化結果和Compaq Alpha 21164作對比,一目瞭然的看出哪些優化是處理器相關的,最後講到profiling(程序剖析)指導優化,能夠說平時可以用到的最高技巧(畢竟我還不 是編譯器開發人員……)和流程走了一邊,現實意義至關之高。
這章把可以用到的全部技巧的原理所有講解得清清楚楚,不作沒必要要的挖深,結合代碼,讓人絲絕不覺枯燥,真是佩服得五體投地。雖然章節後對編譯器優 化還 提供了參考文獻以及加深的內容,不過我以爲這章的內容已經足夠我受用好久了。 優化
「存儲器層次結構」實際上能夠看做是「優化程序性能」一章的延伸,以及爲以後的「虛擬存儲器」作鋪墊。這章主要詳細解釋了高速緩存(cache)的工 做方式,以及利用局部性使得cache達到最好效果的方法。 操作系統
而「虛擬存儲器」(Virtual Memory)則上升到了操做系統層面,詳細解析了VM的實現以及Linux系統上VM組織方式。本身以爲最受用的是malloc/free實現的動態存 儲器分配的具體方法以及對進程中具體存儲結構的瞭解,還有GC的策略。這些讓我感受本身可以作到的事情彷佛又多了一點,一直沒法理解的valgrind之 類軟件的原理彷佛也有了點眉目。 blog
這兩章講得比較細緻,以致於稍微顯得有點枯燥。其實我本身喜歡這兩章的主要緣由是解了我多年來關於存儲器的困惑。不過存儲器方面的內容實在博大精深,本身這徹底是得了點皮毛就沾沾自喜。 進程
其實在學計算機方面我仍是挺實用主義的,一直抱着碰到了再去仔細研究好了的態度,因此看書廣泛不認真,只是求到時候可以找獲得參考。不過這本書我以爲 格外有趣,因此也看得格外認真,把每節後的習題都作了,家庭做業則等着過兩天覆習(計劃是這樣的……)的時候加深印象。 開發
不過一直沒找到CSAPP的實習手冊。其中有個「二進制炸彈」實驗很是吸引人,典型的反彙編做業,有點點實現我小時候破解願望的感受——但願找到之後不要讓我太失望,呵呵。 編譯器
【From 京東讀者評論】