c 記憶體布局淺探(一)

2021-05-24 23:24:31 字數 766 閱讀 2867

一直對

c++vs2003

測試,結果如下,希望對大家有所幫助

: )

說明:

1該文所給出**只說明類的繼承關係,具體測試輸出**不再詳述; 2

該文測試環境為

vs2003

,其他環境沒測試; 3

在下水平有限,本著學習的心態作此文,有高人路過請不吝賜教,不勝感激。

1單繼承

測試**:

這種情況比較簡單:派生類和基類共用乙個

vptr

,這個指標指向派生類的

vtbl。

2 多繼承

測試**

稍微複雜點:派生類和繼承序列中的第乙個父類公用乙個

vptr

,繼承序列中的第二個父類獨用乙個

vptr

,兩個vptr

都指向派生類的

vtbl

,只是偏移量不一樣。

3 菱形繼承

測試**:

又複雜了一點:兩個

vptr

分別指向兩個

vtbl

,乙個vtbl

代表一條繼承路徑。

訪問基類變數和函式需指明從何處繼承來的基類部分,如

derived d;

d.base1::base; 若

base1

和base2

均為修改

base::foob()

,則為同乙個

foob().

淺探C 程式編譯過程

通常說的編譯指由源 生成可執行檔案的過程。c 程式的編譯又可以分為幾個子過程 預處理 preprocessing 在編譯前的對源 進行文字上的預處理。輸出.i檔案。編譯 compilation 將源 轉化為彙編 輸出.s檔案。彙編 assembly 將彙編 轉化為二進位制檔案。輸出.o檔案。平時執行...

C 記憶體布局

注意,上述只描述的是可執行檔案具有三個段,而不是由該三個段構成。在 linux 下,我們可以通過size命令輸出可執行檔案的段資訊。記憶體布局 存放程式指令和字串常量 我們知道,可執行檔案的文字段包含程式的指令,鏈結器把指令直接從可執行檔案拷貝到記憶體中,形成文字段。存放已初始化的全域性變數和sta...

c 記憶體布局

寫好了 只是第一步,接下來還需要編譯生成對應的二進位制才能使用 預處理,編譯,彙編,鏈結 那麼在執行的時候,和資料在記憶體中都是怎麼分布的呢?c的記憶體布局是怎樣的呢?c 的記憶體布局是怎樣的呢?有一點值得注意,c語言和c 的記憶體布局是不一樣的,這也就是平日裡搜尋c 記憶體布局的文章內容總是很相似...