首页 文章

如果在创建对象时创建了vptr,那么为什么具有虚函数的类的大小在32位sys上为4,在64位机器上为8

提问于
浏览
-5

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

2 回答

  • 0

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

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

  • 0

    C标准没有定义 vtablevptr 必须存在,而是定义了polimorphism和动态绑定的行为方式 . 虽然 vtable 是与动态绑定相结合的非常常见的polimorphism实现,但 vptr 不是像指针那样的第一类语言结构,您可以像成员一样访问它,或者将其定义为表示有关引用/解除引用的指针或者尺寸 .

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

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

相关问题