(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
同事推薦讀的這本書,讀完發現正是自己想要的!
之前疑惑的一些東西,有賴于嘗試或猜測的,讀完之后就比較清晰了:
例如
C++的類之于C的結構體,內存布局如何實現的?
C++的靜態函數從內存結構上是如何存儲的?
C++虛函數的調用效率如何?
構造函數的調用時機,是誰來確定的?
等
讀完之后,模型實現清楚了,編譯器做的事情有了了解,它的機理也就比較明白了。
也把自己認識到的幾個點寫下來:
1. C++的類之于結構體,有了函數,虛函數,靜態函數,構造函數,類繼承;
2. 虛函數的內存結構上是虛函數表指針;
函數,靜態函數不占用內存空間,相當于一個函數符號。
3. 編譯期,函數的調用是翻譯為 func(this,參數),靜態函數翻譯為 func(參數);
4. 構造函數、西溝函數的調用,由編譯器在合適的位置調用。
5. 虛函數的調用效率也還是比較高的,調用時并不需要再查詢,在編譯器會確定虛函數的index,調用形如 call this->vptr[0] (this, 參數)。
6. 類繼承從數據的結構上看,在一個數據結構上再附加上一段數據信息;虛函數--在構造函數中,編譯器附加的代碼填充的虛函數表。
7. 全局變量的初始化和析構是編譯器在main的一開始和最后附加了調用的處理。
發現,編譯器附加的處理,附加的代碼真多,為了C++引入的特性操碎了心。
推薦使用C++,對C++和C的不同比較感興趣,希望深入了解,但還沒有讀的同學,可以一讀!
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
新聞熱點
疑難解答
圖片精選