c++虛函式呼叫的反彙編解析
虛函式的呼叫如何能實現其「虛」?作為c++多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c++強大機制的時候,就是教大家怎麼用,何時用,而不會去**一下這個虛函式的真正實現細節。(當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的「多型」了:)。
作為編譯型語言,c++編譯的最後結果就是一堆彙編指令了(這裡不同於.net的clr)。今天,我就來揭開它的神秘面紗,從彙編的層面來看看虛函式到底怎麼實現的。讓大家對虛函式的實現不僅知其然,更知其所以然。(本文程式環境為:pc + windows xp pro + visual c++6.0,文中所得出來的結果和反映的編譯器策略也只針對vc6.0的編譯器)
先看一段簡單**:
code segment:
line01: #include
line02:
line03: class base
line08: };
line09:
line10: class derive : public base
line15: };
line16:
line17: void test(base *p)
line20:
line21: int __cdecl main(int argc, char* argv)
程式的執行結果將是:
class base
那麼將base類的output函式宣告(line05)更改為:
virtual void __stdcall output()
執行一下,看看結果。我可沒有使用物件或者指向類的指標去呼叫函式哦。j
這回你該知道虛函式是怎麼回事了吧?這裡介紹的都是基於微軟
vc++ 6.0
編譯器對虛函式的實現手段。編譯器實現
c++所使用的方法和策略,都是可以從其反彙編語句中一**竟的。了解這些底層細節,將會對提高你的
c/c++
**大有裨益!希望本文能對你有所幫助。任何問題或者指教,請
mailto:[email protected]。
C 虛函式呼叫的反彙編解析
虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的 多型 了 作為編...
C 虛函式呼叫的反彙編解析
虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的 多型 了 作為編...
C 虛函式呼叫的反彙編解析
c 虛函式呼叫的反彙編解析 虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對...