如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8

if vptr is created when object is created then why the size of class having virtual function comes as 4 on 32 bit sys and 8 on 64 bit machine

本文关键字:机器 系统 虚拟 VPTR 创建 创建对象 如果 为什么 功能      更新时间:2023-10-16

据说在创建对象时会创建vptr,那么为什么具有虚函数的类的大小在32位机器上为4,在64位机器上为8,这是否意味着基类有一些隐藏的vptr具有一些虚函数(在派生类中也继承(,如果是,那么该vptr有什么用?

指针的大小取决于操作系统。它在 32 位机器上是 32 位(4 字节(,在 64 位机器上是 8 字节。

如果您要求类的大小,而不是指针的大小,则编译器可能会根据操作系统类型将其调整为 32/64 的倍数。

C++标准没有定义vtablevptr必须存在,而是定义了多态性和动态绑定的行为方式。尽管vtable是与动态绑定结合使用的非常常见的多态性实现,但vptr不是像指针那样的第一类语言构造,您可以像成员一样访问它,或者被定义为充当有关引用/取消引用或大小的指针。

因此,编译器可以自由使用其他实现,因此您无法使用虚拟成员函数预测对象的大小。

但是,在大多数实现中,vptr可能寻址与普通指针相同的内存大小,因此vptr的大小很可能与该体系结构中普通指针的大小相同,即 32 位系统上为 4,64 位系统上为 8