C#中的固定语句
时间:2020-03-06 14:55:34 来源:igfitidea点击:
在我们的一个项目中,我们具有与以下代码类似的代码。谁能用简单的英文解释为什么在这里需要固定的陈述?
class TestClass { int iMyVariable; static void Main() { TestClass oTestClass = new TestClass(); unsafe { fixed (int* p = &oTestClasst.iMyVariable) { *p = 9; } } } }
解决方案
在执行指针算术的任何地方都需要它,以防止垃圾收集器在我们周围四处移动。
固定语句将"固定"内存中的变量,以使垃圾收集器在收集时不会将其移动。如果确实移动了变量,则指针将变得无用,并且当我们使用它时,我们将尝试访问或者修改我们不希望的内容。
因为我们在不安全模式(指针)下运行,所以固定指令为该变量分配了特定的内存空间。如果没有放置固定指令,则垃圾收集器可以在需要时将变量移到内存中的任何位置。
希望对我们有所帮助。
它将指针固定在内存中。垃圾收集语言可以自由地在内存中移动对象以提高效率。这对程序员是透明的,因为他们并没有真正在"普通" CLR代码中使用指针。但是,当确实需要指针时,如果要使用它们,则需要在内存中对其进行修复。
MSDN有一个非常相似的示例。固定语句基本上阻止垃圾收集。在.Net中,如果使用指向内存位置的指针,则运行时可以随时将对象重新分配到"更好"的位置。因此,如果我们想直接访问内存,则需要对其进行修复。