我想知道本机指针是否有任何指向托管堆的方式?我知道这将是一件危险的事情,因为堆压缩和GC周期改变了对象地址,但它仍然可能吗?一个例子将不胜感激。
此外,Handle(^)是否真的无法指向本机堆?
感谢。
答案 0 :(得分:5)
是的,这是支持的,但指向的对象需要固定。您可以使用.NET的GCHandle :: Alloc()或使用C ++ / CLI pin_ptr<>
类来完成此操作。将物体固定很长时间是不好的,它们给垃圾收集器带来了困难,因为它需要在路上的岩石周围工作。在调用本机代码时,固定很常见。
对本机堆中的块的跟踪引用(帽子)没有意义,它们只跟踪垃圾收集堆中的对象。