C# 嵌套固定语句
根据C#forC# 嵌套固定语句,c#,garbage-collection,unsafe,C#,Garbage Collection,Unsafe,根据C#forfixed声明: fixed语句防止垃圾收集器重新定位 可移动变量。 … 执行语句中的代码后,所有固定的变量都将被删除 未固定和接受垃圾收集。因此,不要指向 这些变量在fixed语句之外 我的问题是,如果我们为同一个变量嵌套了fixed语句,我在这一页上没有找到的是什么 var data = new byte[100]; unsafe { fixed(byte* pData = data) { //pData points to the "pinne
fixed
声明:
fixed语句防止垃圾收集器重新定位
可移动变量。…
执行语句中的代码后,所有固定的变量都将被删除 未固定和接受垃圾收集。因此,不要指向 这些变量在fixed语句之外 我的问题是,如果我们为同一个变量嵌套了
fixed
语句,我在这一页上没有找到的是什么
var data = new byte[100];
unsafe
{
fixed(byte* pData = data)
{
//pData points to the "pinned" variable
fixed(byte* pData2 = data)
{
//pData points to the "pinned" variable
//pData2 points to the "pinned" variable
}
//Does pData still point to the "pinned" variable?
}
}
当然,上面的代码仅用于说明。实际应用可能是递归函数。这正是您所期望的工作方式,必然如此。fixed属性与指针变量关联,而不是它所固定的对象。因此,在内部范围块中有两个变量固定数组。接下来是一个固定它的变量。它仍然被钉住了 当您递归时,数组在方法之外声明,那么将有更多的变量固定它 良好的心智形象是基于这样一个假设:fixed初始化对象的GCHandle。您可以为一个对象创建任意多个GCHandles,GC并不介意。这实际上不会发生在运行时,修复比GCHandle更有效。它是变量的一个属性,在像ildasm.exe这样的反汇编程序中显示为[pinted]。GC在遍历堆栈时发现属性,查找对象引用。另请参见: