c++/cli 中的 gcroot
gcroot 是什么意思?我在我正在阅读的代码中找到了它。
What does gcroot mean? I found it in code I am reading.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
gcroot 是什么意思?我在我正在阅读的代码中找到了它。
What does gcroot mean? I found it in code I am reading.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
gcroot 是一个 C++/cli 模板类,可以轻松地在 C++/cli 类中保存托管类型。
例如,您可以具有以下内容:
gcroot 充当对托管对象或值类型实例的引用,并在复制对象或值类型实例时执行所有工作。
通常您需要使用 GCHandle 和 .NET 框架的一些 C 函数。这一切都封装在 gcroot 中。
gcroot is a C++/cli template class that eases holding managed types in C++/cli classes.
You can for example have the following:
gcroot acts as a reference to the managed object or value type instance and is doing all the work when copying the object or value type instance.
Normally you need to work with GCHandle and some C functions of the .NET framework. This is all encapsulated in gcroot.
当.NET垃圾收集器运行时,它通过进行可达性分析来确定哪些对象仍在使用中。在查找指向对象的指针时,仅分析托管堆,因此,如果您有一个从本机对象到托管对象的指针,则需要让垃圾收集器知道,以便它可以将其包含在可达性分析中,这样它就可以如果目标在压缩期间移动,则更新指针。
正如 rstevens 所说,.NET
GCHandle
类执行此操作,而 C++/CLI 是面向 C++ 的GCHandle
包装器,它增加了类型安全性和方便的语法。When the .NET garbage collector runs, it determines which objects are still in use by doing reachability analysis. Only the managed heap is analyzed while looking for pointers to objects, so if you have a pointer from a native object to a managed object, you need to let the garbage collector know, so it can include it in reachability analysis, and so it can update the pointer if the target moves during compaction.
As rstevens said, the .NET
GCHandle
class does this, and C++/CLI is a C++-oriented wrapper forGCHandle
which adds type safety and convenient syntax.