时间:2022-04-28 21:24:01 | 来源:行业动态
时间:2022-04-28 21:24:01 来源:行业动态
vptr和vtable是C 的一个概念:当你定义的类型中有虚函数存在时,内存对象的第一个位置会存放一个vptr指针,该指针指向vtable(虚函数表)。因此当你开始创建的自定义类型一开始没有虚函数时(包括虚析构函数virtual ~MyClass()),一切运行正常。有一天你重构此类型,增加了一些虚函数:DUANG,一切都崩塌了!原因就在于Unmanaged侧内存对象的排列规则变了,原有的对象字段都被新加入的vptr往后面移位了。此时可能你唯一能做的就是通过Layout.Explicit来手工对齐每一个字段新的位置。关键词:布局,变化,函数