給每個菜鳥程式設計師的修養之道

woshinima654發表於2014-04-24
   (程式設計師的自我修養——連結、裝載和庫讀後感)

中國科學技術大學軟體學院

黃睿

原創作品版權所有轉載請註明出處

CPU體系結構,彙編,C語音(包括C++)和作業系統,永遠都是程式設計大師們的護身法寶,就如少林寺的《易筋經》,是最為基礎又是最上乘的武功;學會了《易筋經》,你將無所不能,任你創造武功;學會了程式設計中的“易筋經”,大師們可以任意開發作業系統,編譯器,甚至是開發一種新的程式設計語言又或是全新的作業系統!

—————

如果你是高手,Linux Hacker或者geek,請繞行 
但如果你是新手 
如果你曾好奇過windows系統目錄下和軟體目錄下大堆大堆的dll檔案是什麼 
如果你曾疑惑過我寫下的程式碼經歷的怎樣的歷程最後怎樣到達了記憶體,編譯器每天用,它到底做了什麼 
如果你已經學習或接觸了C,彙編,計算機結構,但還是沒辦法把三者的關係理的很順很清或者對應起來 
那麼深入研讀一下這本書絕對是對你的一大幫助 

——--豆瓣書評

正文:

大約是在考研的時候在多看上看見了此書,初聽書名還以為是本講述諸如程式設計思維鍛鍊一類的書籍,也就不在我閱讀計劃之列。直到來科大讀研時候,詫異的發現,此書赫然是華保健老師講述的資訊保安課程推薦教材同時亦是孟寧老師推薦讀物,遂借旁人書一閱,閱之慾罷不能,購買之,用了月餘時間拜讀之。

介紹完了我看此書的來龍去脈,那這本書究竟講述的是什麼呢?

《程式設計師的自我修養》書名很霸氣,但是其實書中內容都概括在小標題中了,即連結、裝載和庫

你可能會問我們為什麼要掌握這些知識,我不瞭解這些,可是並不妨礙我寫出漂亮的程式碼啊

然而作為一個程式設計師,也許一輩子都不瞭解這些底層知識,僅僅用掌握的程式設計技巧,各種奇妙的API函式,也可以編出合格的程式來,但是就像侯捷形容不瞭解MFC的機制而使用MFC程式設計的人那樣,“編出的只是一些拼積木一樣的玩具”。 

只知所以然,而不知其所以然。

通過學習這本書我們能夠窺探程式設計軟體的執行機制和原理,譬如最簡單的Hello world程式(c/c++)的執行可以分解成四個主要的步驟:分別是預處理(主要處理那些以“#”開始的預編譯指令,將.c檔案和與之相關.h檔案通過被預編譯器預編譯成一個.i/.ii檔案)編譯(將預編譯器處理後的檔案進行一系列詞法分析、語法分析、語義分析及優化後生成相應的彙編程式碼檔案)彙編(將編譯後得到的彙編程式碼檔案翻譯成本地機器能執行的機器指令,此時可得到目標檔案“非執行檔案”);為什麼彙編後還不是得到執行檔案呢?這裡涉及第四個步驟連結(將一系列的目標檔案組合連結起來最終生成目標執行檔案)。

這樣我們就能將我們所學過的C,彙編,編譯原理作業系統的知識給串聯起來,深刻的瞭解我們所寫程式是如何變成可執行檔案的,從程式碼的預處理,編譯,彙編,到連結生成執行檔案的結構,到執行態時對程式記憶體的分配,都有了一個整體的感覺,增強了我們對程式的控制力,不再有霧裡看花的感覺。

相關文章