C++通过虚拟机制支持动态绑定。但据我所知,虚拟机制是编译器的实现细节,标准只规定了特定情况下应该发生的行为。大多数编译器都通过虚拟表和虚拟指针来实现虚拟机制。这不涉及虚拟指针和表的实现细节。我的问题是:
- 是否有任何编译器以除了虚拟指针和虚拟表机制之外的其他方式实现虚拟函数的动态调度?据我所见,大多数编译器(如G++、Microsoft Visual Studio)都是通过虚拟表和指针机制来实现的。那么实际上还存在其他的编译器实现方式吗?
- 仅具有一个虚拟函数的任何类的
sizeof
将是该编译器上指针(在this
中的vptr)的大小。因此,鉴于虚拟指针和TBL机制本身是编译器的实现,我上述说法是否总是正确的?
vptr
,将整个函数表存储在每个对象中。在某些非常特定的情况下,这可能很有价值,因为在虚拟函数调用期间,这种方法可以节省额外的内存间接引用。在驱动程序开发中,这可能是至关重要的:这种间接引用可能导致对分页内存的访问。 - valdo