今天看《深度探索c++對象模型》上說, 編譯器會把虛函數(shù)調(diào)用語句“p->func()”轉(zhuǎn)化為“*(p->vptr[index])(p)”;index是偏移量,因為虛函數(shù)表中可能有多個虛函數(shù)地址。那是不是說:虛函數(shù)的調(diào)用和普通函數(shù)相比其實就多了尋址去vtable表中取得函數(shù)入口地址這一步?
1 回答

POPMUISE
TA貢獻1765條經(jīng)驗 獲得超5個贊
兩者的調(diào)用模型不一樣,非虛函數(shù)的地址是固定的,對它的調(diào)用直接被編譯為CALL 固定地址的匯編代碼;虛函數(shù)的調(diào)用則是要經(jīng)過找到對象中的vptr指針,通過指針找到類的vtable表,結(jié)合偏移量找到表中要調(diào)用的函數(shù)地址,最終再CALL 該地址這么幾個步驟。
- 1 回答
- 0 關(guān)注
- 703 瀏覽
添加回答
舉報
0/150
提交
取消