固定和不安全有什么区别

Ted*_*ith 4 c# memory unsafe fixed

为什么有两种不同的方法可以锁定.NET中的内存?他们之间有什么区别?

cgr*_*eno 16

fixed语句用于unsafe修饰符的上下文中.Unsafe声明您将使用指针算法(例如:低级API调用),这是在正常的C#操作之外.该固定语句用来锁定内存到位,使垃圾收集器会不会重新分配它,而它仍然在使用.您不能在不安全的上下文之外使用fixed语句.

public static void PointyMethod(char[] array)
{
    unsafe
    {
        fixed (char *p = array)
        {
            for (int i=0; i<array.Length; i++)
            {
                System.Console.Write(*(p+i));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)