第七周读书笔记
《深入理解計算機系統》從程序設計與性能優化的角度介紹了計算機系統,讓我從程序員的角度了解了計算機系統,更深入地理解了硬件、操作系統和編譯系統等對應用程序性能和正確性的影響,并掌握了基本的程序優化設計技術,為編寫更高效可靠的程序打下了基礎。下面是我在閱讀過程中的一些技術領悟與心得體會。
1、信息表示
在信息表示板塊我了解了數據在計算機中的表示,不同的機器有不同的字長和順序約定,包括大端法和小端法,就連程序也是字節序列。當然,計算機中的數據都有一定的類型,決定了它的范圍、大小和操作方式。如果不注意這些性質就容易在程序中產生致命的錯誤。例如,有符號數在和無符號數比較時,有符號數會被隱式轉換為無符號數。隱式轉換過程中位表示形式沒有變化,但是理解方式發生了變化,于是就會出現負數變為大正數的現象。在符號拓展時,會出現符號位復制的現象,在進行加法和乘法運算時,還要注意溢出問題。在大多數機器中,移位和加運算比乘法快得多,但負數除以2的冪需要注意按情況進行修正。以上這些雖然看起來是小問題,但在編寫程序過程中卻極容易出錯,對計算機算術的深刻理解是編寫可靠程序的關鍵。
2、匯編語言
這部分首先介紹了Intel處理器的發展史,概覽了處理器核心數及頻率變化,及x86指令集和64位架構發展史,然后介紹了c語言、匯編碼和機器碼,匯編語言中的數據傳送指令及算術指令。接下來介紹了用于控制的條件碼以及條件分支結構,各種循環的異同和switch語句。
? ? ?? 我體會到,由于匯編代碼非常接近于計算機執行的實際機器代碼,閱讀這些代碼使我們更能夠理解編譯器的優化能力,并分析出代碼中的潛在低效率。我們還了解了棧幀結構,知道了過程調用離不開棧指針和幀指針,以及轉移控制指令。在數組介紹中,我知道了高維數組的內存分配的行優先順序,進一步學習了指針訪問方式;在結構數據類型中,我驚訝的發現結構成員的順序會影響結構變量的大小,因為對齊條件——某種數據類型的地址必須是某個值的倍數——以及邊界條件,即結構末尾可能會有填充。最后我還了解了緩沖區溢出。這是因為c對數組引用不進行任何邊界檢查,所以對越界的數組元素的寫操作會破壞儲存在棧中的狀態信息,從而可能出現很嚴重的錯誤。對于程序員而言,使用gets等能導致儲存溢出的函數,都是不好的習慣。
以前寫程序,都只關注最表面的東西,從未了解過計算機的實現過程和代價。初讀這本書,了解一些計算機的實現過程,不但能幫助我理解計算機的優化原理,對學習其他課程也有幫助。
轉載于:https://www.cnblogs.com/ustcccj/p/8883743.html
總結
- 上一篇: 袁大头多少钱一个啊?
- 下一篇: 万物女神清新装大概多少元?(全套)