虚函数调度的替代实现
虽然 C 中的虚函数通常是通过虚表和虚指针实现的,但理论上是可以的
编译器实现
关于第一个问题,确实大多数编译器,包括 G 和 Microsoft Visual Studio,都使用以下方式实现虚拟函数调度虚拟表。然而,某些编译器确实可能使用不同的技术。例如,某些语言使用对象内指针在对象本身中存储虚拟函数信息。
内存含义
至于第二个问题,具有虚函数的类的 sizeof 始终是给定编译器上指针的大小,这不一定是正确的。具有替代虚拟函数分派实现的编译器可能会以不同的方式为虚拟函数信息分配内存。
例如,提供的答案中提到的编译器利用单独的数据结构将对象地址映射到元数据。此实现为简单对象分配更多存储空间,但对于具有大量基数的复杂对象更有效,对于数组更有效。此外,该实现还提供了对虚函数信息的快速查找能力。
结论
虽然虚表和虚指针是最常见的实现方式,但值得注意的是存在用于在 C 编译器中实现虚函数分派的替代方法。了解这些替代方案可以进一步深入了解 C 程序的实现和性能特征。
以上是C 中的虚拟函数调度是否有虚拟表的替代方案?的详细内容。更多信息请关注PHP中文网其他相关文章!