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