首页  >  文章  >  后端开发  >  虚函数是否总是添加对象指针的大小?

虚函数是否总是添加对象指针的大小?

Barbara Streisand
Barbara Streisand原创
2024-11-04 10:02:30595浏览

Do Virtual Functions Always Add the Size of a Pointer to an Object?

替代虚拟函数调用实现

在 C 中,通过虚拟机制促进动态绑定。虽然该标准指定了虚拟函数调用的预期行为,但具体实现因编译器而异。虚拟表和虚拟指针机制被 G 和 Microsoft Visual Studio 等编译器广泛采用。

替代实现

尽管虚拟表方法很流行,但其他虚拟函数动态调度的实现确实存在。一种已知的替代方案涉及使用对象内指针来代替虚拟指针。此策略可以更有效地处理具有多个基数和数组的复杂对象,因为数组中的所有对象只需要映射表中的单个条目。

对象大小和虚拟函数

具有虚函数的类的大小始终等于指针(虚拟指针)的大小的说法并不普遍正确。虚函数分派的实际实现会影响对象的大小。例如,在上面提到的替代实现中,由于对象内指针需要额外的存储空间,具有虚函数的对象的大小可能会超过指针的大小。

的限制虚拟表

虽然虚拟表是动态调度的常见解决方案,但它们也有局限性。例如,它们的使用可能会导致较大的虚函数表和缓慢的对象初始化,特别是对于具有多个基础的复杂 mixin 对象。这个结果源于子对象的运行时类型必须始终正确的要求,即使在构造期间也是如此。

替代数据结构

克服这些问题的一种方法限制是采用替代数据结构来存储元数据。例如,Judy 数组已用于创建对象地址与其相应元数据之间的高效映射。这种方法提供了快速查找和适度的存储要求。

以上是虚函数是否总是添加对象指针的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn