c++本不是門易學的語言,入門如此,高階更甚,而當我從乙個寫c++程式之人,轉變成除錯大型c++工程之人的時候,我深切的感受到了c++的晦澀難懂。
當我面對乙個個bug的時候,我是那麼迷茫:
明明已經是個空指標了,為何程式會崩潰在指標指向的函式之中,而不是呼叫之時?
明明是已經被刪除的指標,怎麼還能對記憶體訪問得那樣自如?
明明也是個空指標,但這次為何在函式呼叫之時就崩潰了?
再加上找不到原因的野指標、多執行緒引起的訪問衝突、無緣無故的記憶體異常。
c++像一匹脫韁的野馬,四處亂竄,而我卻完成不能駕馭。
我不得不發出一聲嘆息:「dt的c++啊~~!」
幸好,得到前輩的指點,告訴我除錯c++的乙個簡單的方法:「看彙編吧」。。
是啊,函式那麼長,變數那麼多,還有編譯器的優化和inline函式的干擾,想從函式呼叫棧這個單薄的資訊找到程式崩潰的關鍵原因,談何容易。
只有彙編了。
通過彙編,我終於看到了真實的c++,那個隱藏在表示式、變數、函式、類和模板背後的c++。
也通過這些除錯的經歷,認識到了作為乙個c++的程式設計師,具有底層實現知識的素質是多麼重要。
只有了解了c++實現的基本方法和模型,才能更好的駕馭這匹駿馬。
於是就在上個星期,我買下了stanley b.lippman著,侯捷譯的《深度探索c++物件模型》(英文原名:"inside the c++ object model")。
開始了解那些c++**背後的世界。
這本書有7章,從c++物件的整體、建構函式等到異常處理、模板。介紹了c++物件背後,編譯器層面所作的工作。
從我剛開始讀這本書的感受看來,這確是本好書,利用框圖、**和詳細的討論,包括不同實現方式之間的對比、與c語言的對比,再加上一些例項,試圖將晦澀的c++解剖開來,清晰的展現在眼前。
深度探索C 物件模型之C 物件模型筆記
0.菜鳥覺得,在看這本書的時候最好切換角色,把自己的思維轉換成編譯器開發者,去考慮問題,這樣會容易理解些.當然這樣很難,就想著自己要解決什麼樣的問題好了 1.在c 中,類的資料成員有兩種 靜態和非靜態 成員函式有三種 靜態,非靜態 虛函式。之所以這樣分,大概是因為在設計c 物件模型時,非靜態的資料成...
深度探索C 物件模型筆記(一)
封裝的開銷開銷 c 較c多了一些封裝的特性,增加封裝特性不會引起布局 layout 的開銷,c 類的成員資料直接包含在每個物件內部,而noninline成員函式雖然在類中申明,但不會欻現在每個物件內部,每個noninline的成員函式僅產生乙個唯一的函式實體。而inline函式在會為每個物件生成乙個...
《深度探索c 物件模型》學習筆記
封裝並未給c 帶來任何的空間或執行期的不良後果,c 在布局和訪問時間上的主要額外負擔由虛擬化引起。包括 1 virtual function機制。用以支援乙個有效率的 執行期繫結 2 virtual base class機制。用以實現 多次出現在繼承體系中的base class,有乙個的單一而被共享...