[C++基礎]043_看圖識C++記憶體布局[C++基礎]044_C++的成員函數本質

來源:互聯網
上載者:User

序言

    首先感謝bolow大神的指導,他教會我查看Visual Studio下C++記憶體布局的方法,不敢獨享,特此分享。

    1. Visual Studio命令列查看記憶體布局的方法

cl Test.cpp /d1reportSingleClassLayoutBase

    比如你建立了一個源檔案Test.cpp,裡面有一個類Base,那麼上面的命令就能查看類Base的記憶體布局了。當然,這裡我假設你會用Visual Studio編譯工具cl,如果不會,可以參考博主部落格《[C++基礎]042_用Visual Studio的命令列編譯源碼》。

看圖認識C++記憶體布局

        以片所展示的記憶體布局主要有:單純類,有虛函數的複雜類,有繼承關係的單純類,有虛函數有繼承關係的複雜類,多重繼承類,鑽石型繼承類。

雖然類Base裡有foo函數,但是我們的記憶體布局裡沒有函數的位置,這是為什麼呢?參見博主另篇部落格《[C++基礎]044_C++的成員函數本質》 

 

這裡我們有虛函數了,不過虛函數也只是佔用4個位元組。無論你有多少個虛函數,仍然是佔4個位元組。因為它只是個指向虛函數表的指標而已。

 

有繼承關係時,子類的頭部是基類的記憶體布局。

 

有虛函數的繼承關係時,第一個儲存的仍然是虛函數表指標。

 

多重繼承,不過,注意一下,這裡有兩個虛函數表指標,切記。

 

鑽石型繼承關係,也不難,就是往裡面死命的填。

其他博文推薦

     C++ 對象的記憶體布局(上):http://blog.csdn.net/haoel/article/details/3081328

     C++ 對象的記憶體布局(下):http://blog.csdn.net/haoel/article/details/3081385

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.