替代的虚拟函数调用实现
而虚拟表和虚拟指针机制通常用于在C编译器中实现虚拟函数的动态调度,有没有采用替代方法的编译器?
编译器实现
绝大多数 C 编译器,包括 G 和 Microsoft Visual Studio,都使用虚拟表和虚拟动态调度的指针方法。然而,在极少数情况下,编译器可能会以不同的方式实现它。例如,某些编译器可能使用类似于对象内指针的东西,其中虚拟函数指针存储在对象本身内。对于具有大量基数和数组的复杂对象来说,此类实现可能更有效,因为它们只需要映射表中的单个条目来表示数组中的所有对象。
对象大小和虚拟函数
“任何只有虚函数的类的大小将是该编译器上指针(其中的 vptr)的大小”的说法通常是正确的,因为虚拟指针通常存储为物体。然而,在使用不同虚拟分派方法的替代实现中,情况可能并不总是如此。
总之,虽然虚拟表和虚拟指针机制是 C 编译器中最流行的动态分派实现,但有些编译器可以针对某些优化场景采用替代方法。使用的具体实现可能会影响存储要求和查找效率等因素。
以上是C 编译器中是否有虚拟函数调用的替代实现?的详细内容。更多信息请关注PHP中文网其他相关文章!