数据打包和虚函数表指针

Data packing and vtable pointer

本文关键字:函数 指针 数据      更新时间:2023-10-16

这是我昨天发布的问题的后续问题:

sizeof(myobject)不是我计算的

我创建了一个类并使用sizeof(myclass)计算它的大小。大小为12字节。然后我添加虚拟成员,大小增加到24字节。这似乎又是数据打包问题(因为虚表指针的大小只有8个字节)。

所以,我的问题是:是否有可能告诉编译器将虚表指针放在其他数据成员之前,以便我可以保留额外的4字节未使用的空间?我知道我可以排序数据成员,但是我可以"排序"虚函数表指针吗?

约翰

排序可能不是问题,即使你有一个数组,你的虚表指针可能必须是8字节对齐的。如果数组的大小为20,则数组中每隔一个元素就会有一个虚值表指针错位4个字节。

(注意,不是虚值表指针的内容会对齐错误。在数组中,所有虚表指针都相等)