gpt4 book ai didi

.net - 了解 gcroot

转载 作者:行者123 更新时间:2023-12-03 10:41:09 34 4
gpt4 key购买 nike

我一直在读这个article了解 gcroot 模板。我明白

gcroot provides handles into the garbage collected heap



然后

the handles themselves are not garbage collected.



我不明白的是以下内容:

When the CLR object moves with the garbage-collected heap, the handle will return the new address of the object. A variable does not have to be pinned before it is assigned to a gcroot template.



这是否意味着垃圾收集器将删除 CLR 对象,即使存在引用该对象的 gcroot 句柄?

它所指的“新地址”是什么? “变量在分配给 gcroot 模板之前不必固定”是什么意思?

最佳答案

垃圾收集不只是删除未引用的对象,它还在仍然被引用的对象周围移动,例如对空闲内存池进行碎片整理。当文章谈到对象在 CLR 堆中移动时,它可能是在说“当垃圾收集移动仍然引用的对象时,gcroot 句柄将自动更新以仍然指向 CLR 对象。”

您可以使用 pin_ptr 防止 GC 移动对象。关键字,像这样:

Object ^obj = gcnew <something>;
pin_ptr pinned = obj; /* obj won't move due to GC as long as pinned is in scope. */
/* do something interop-y here, pass to native code in a DLL, etc. */

this article有关固定的更多信息。

观察:文章可能有错别字。如果它说“在垃圾收集堆内”而不是“在垃圾收集堆内”,是否会提高您的理解?文章中的措辞方式听起来就像每当 GC 打扫房屋时,地球都会在您的脚下移动。

关于.net - 了解 gcroot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4281834/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com