C++ cli C++;CLI

C++ cli C++;CLI,c++-cli,C++ Cli,我想知道本机指针是否可以指向托管堆?我知道这是一件危险的事情,因为堆压缩和GC周期会改变对象地址,但这仍然可能吗?请举个例子 另外,句柄(^)确实不能指向本机堆吗 谢谢。是的,这是受支持的,但指向的对象需要固定。您可以使用.NET的GCHandle::Alloc()或使用C++/CLIpin_ptr类来执行此操作。长时间固定物体是不好的,因为垃圾收集器需要在道路上的岩石周围工作,所以很难固定物体。在调用本机代码时,固定非常常见 对本机堆中的块的跟踪引用(hat)毫无意义,它们只跟踪垃圾收集堆中的

我想知道本机指针是否可以指向托管堆?我知道这是一件危险的事情,因为堆压缩和GC周期会改变对象地址,但这仍然可能吗?请举个例子

另外,句柄(^)确实不能指向本机堆吗


谢谢。

是的,这是受支持的,但指向的对象需要固定。您可以使用.NET的GCHandle::Alloc()或使用C++/CLI
pin_ptr
类来执行此操作。长时间固定物体是不好的,因为垃圾收集器需要在道路上的岩石周围工作,所以很难固定物体。在调用本机代码时,固定非常常见


对本机堆中的块的跟踪引用(hat)毫无意义,它们只跟踪垃圾收集堆中的对象。

是的,这是受支持的,但需要固定指向的对象。您可以使用.NET的GCHandle::Alloc()或使用C++/CLI
pin_ptr
类来执行此操作。长时间固定物体是不好的,因为垃圾收集器需要在道路上的岩石周围工作,所以很难固定物体。在调用本机代码时,固定非常常见


对本机堆中的块的跟踪引用(hat)毫无意义,它们只跟踪垃圾收集堆中的对象。

我不知道您想做什么,但在我所有的应用程序中,我发现这样做是不必要的。在托管类中有指向非托管堆的指针,在非托管类中有指向托管堆的句柄,我能够解决所有问题。我不知道您想做什么,但在我所有的应用程序中,我发现这样做是不必要的。通过在托管类中使用指向非托管堆的指针,以及在非托管类中使用指向托管堆的句柄,我能够解决所有问题。