数据打包和vtable指针

时间:2014-06-09 23:10:31

标签: c++ sizeof vtable packing

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

sizeof(myobject) not what I have calculated

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

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

约翰

1 个答案:

答案 0 :(得分:0)

订购可能不是问题,即使你有一个数组,你的vtable指针可能必须是8字节对齐。如果大小为20,则数组中的每个第二个元素都有一个vtable指针,该指针未对齐4个字节。

(请注意,这不是vtable指针的内容,它会被错位。在数组中,所有vtable指针都相等)