18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 营销百科 > 虚拟函数虚拟函数的动态绑定

虚拟函数虚拟函数的动态绑定

时间:2023-03-26 13:06:01 | 来源:营销百科

时间:2023-03-26 13:06:01 来源:营销百科

虚拟函数虚拟函数的动态绑定:虚拟函数的'动态绑定'特性虽然很好,但也有其内在的空间以及时间开销,每个支持虚拟函数的类(基类或派生类)都会有一个包含其所有支持的虚拟函数指针的'虚拟函数表'(virtual table)。另外每个该类生成的对象都会隐含一个'虚拟函数指针'(virtual pointer),此指针指向其所属类的'虚拟函数表'。当通过基类的指针或者引用调用某个虚拟函数时,系统需要首先定位这个指针或引用真正对应的'对象'所隐含的虚拟函数指针。'虚拟函数指针',然后根据这个虚拟函数的名称,对这个虚拟函数指针所指向的虚拟函数表进行一个偏移定位,再调用这个偏移定位处的函数指针对应的虚拟函数,这就是'动态绑定'的解析过程(当然C 规范只需要编译器能够保证动态绑定的语义即可,但是绝大多数的C 编译器都是用这种方式实现虚拟函数的),通过分析,不难发现虚拟函数的开销:

—空间:每个支持虚拟函数的类,都有一个虚拟函数表,这个虚拟函数表的大小跟该类拥有的虚拟函数的多少成正比,此虚拟函数表对一个类来说,整个程序只有一个,而无论该类生成的对象在程序运行时会生成多少个。

— 空间:通过支持虚拟函数的类生成的每个对象都有一个指向该类对应的虚拟函数表的虚拟函数指针,无论该类的虚拟函数有多少个,都只有一个函数指针,但是因为与对象绑定,因此程序运行时因为虚拟函数指针引起空间开销跟生成的对象个数成正比。

— 时间:通过支持虚拟函数的类生成的每个对象,当其生成时,在构造函数中会调用编译器在构造函数内部插入的初始化代码,来初始化其虚拟函数指针,使其指向正确的虚拟函数表。

— 时间:当通过指针或者引用调用虚拟函数时,跟普通函数调用相比,会多一个根据虚拟函数指针找到虚拟函数表的操作。

关键词:虚拟,函数,动态

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭