今天看《深度探索c++对象模型》上说, 编译器会把虚函数调用语句“p->func()”转化为“*(p->vptr[index])(p)”;index是偏移量,因为虚函数表中可能有多个虚函数地址。那是不是说:虚函数的调用和普通函数相比其实就多了寻址去vtable表中取得函数入口地址这一步?
1 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
两者的调用模型不一样,非虚函数的地址是固定的,对它的调用直接被编译为CALL 固定地址的汇编代码;虚函数的调用则是要经过找到对象中的vptr指针,通过指针找到类的vtable表,结合偏移量找到表中要调用的函数地址,最终再CALL 该地址这么几个步骤。
- 1 回答
- 0 关注
- 643 浏览
添加回答
举报
0/150
提交
取消