替代虚拟函数调用实现
在 C 中,通过虚拟机制促进动态绑定。虽然该标准指定了虚拟函数调用的预期行为,但具体实现因编译器而异。虚拟表和虚拟指针机制被 G 和 Microsoft Visual Studio 等编译器广泛采用。
替代实现
尽管虚拟表方法很流行,但其他虚拟函数动态调度的实现确实存在。一种已知的替代方案涉及使用对象内指针来代替虚拟指针。此策略可以更有效地处理具有多个基数和数组的复杂对象,因为数组中的所有对象只需要映射表中的单个条目。
对象大小和虚拟函数
具有虚函数的类的大小始终等于指针(虚拟指针)的大小的说法并不普遍正确。虚函数分派的实际实现会影响对象的大小。例如,在上面提到的替代实现中,由于对象内指针需要额外的存储空间,具有虚函数的对象的大小可能会超过指针的大小。
的限制虚拟表
虽然虚拟表是动态调度的常见解决方案,但它们也有局限性。例如,它们的使用可能会导致较大的虚函数表和缓慢的对象初始化,特别是对于具有多个基础的复杂 mixin 对象。这个结果源于子对象的运行时类型必须始终正确的要求,即使在构造期间也是如此。
替代数据结构
克服这些问题的一种方法限制是采用替代数据结构来存储元数据。例如,Judy 数组已用于创建对象地址与其相应元数据之间的高效映射。这种方法提供了快速查找和适度的存储要求。
以上是虚函数是否总是添加对象指针的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!