我想了解虚拟表的工作原理并可能在将来使用它。我知道DST指针是胖指针(usize,usize),其中第一个指针是数据,第二个指针是虚拟表。我能够通过指针获取数据,但显然它没有\xe2\x80\x99无法获取指向虚拟表的指针,因为来自https://docs.google.com/presentation/d/1q- c7UAyrUlM-eZyTo1pd8SZ0qwA_wYxmPZVOQkoDmH4/edit#slide=id.p结构体的大小应该由下面代码中的size变量中的指针存储,但事实并非如此。也许我没有正确理解虚拟表是如何存储的?
\n我的代码:
\n#![feature(pointer_byte_offsets)]\n\ntrait MyRule {\n fn some_method1(&self) {}\n fn some_method2(&self) {}\n}\nstruct MyData {\n data: u32,\n}\n\nimpl MyRule for MyData {}\n\nfn main() {\n unsafe {\n let b: Box<dyn MyRule> = Box::new(MyData { data: 5 });\n let fat_ptr = Box::into_raw(b);\n dbg!(*(fat_ptr.cast::<u32>())); // data = 5\n let vtbl_ptr = fat_ptr.byte_add(8).cast::<*mut usize>();\n let destructor_ptr = (*vtbl_ptr).cast::<usize>();\n let size = destructor_ptr.byte_add(8);\n dbg!(size);\n dbg!(*size); // Not size!!!\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我认为问题在于我没有正确获取指向表本身的指针。那么正确的方法是什么?如何访问表元素?
\n