我很好奇为什么 vptr 的大小在 64 位机器上似乎需要 64 位,以及 C++ 是否真的需要它。
所有 vptr 需要做的就是指向 vtables,并且由于 vtables 不能占用太多内存并且可以组合在一起,32 位应该足以解决它们。
你的课程有多少个课程?1000?10000?他们平均有多少个虚函数?也许100?如果编译器+链接器连续放置所有 vtable,它们占用的空间不会超过几 MB。将具有 32 位索引的特定 vtable 寻址到“所有 vtable 的数组”中应该可以工作。
我之所以这么说,是因为某些带有虚函数的小类;有时我会看到一个只有 2 个单词 + vptr 的类的大量对象数组,而 64 位 vptr 对内存使用有重大影响。