C# 固定和不安全的区别是什么

C# 固定和不安全的区别是什么,c#,memory,unsafe,fixed,C#,Memory,Unsafe,Fixed,为什么在.NET中有两种不同的方式锁定内存?它们之间的区别是什么?固定语句用于的上下文中。Unsafe声明将使用指针算法(例如:低级API调用),这超出了正常的C#操作。该语句用于将内存锁定到位,以便垃圾收集器在内存仍在使用时不会重新分配内存。不能在不安全上下文之外使用fixed语句 范例 public static void PointyMethod(char[] array) { unsafe { fixed (char *p = array)

为什么在.NET中有两种不同的方式锁定内存?它们之间的区别是什么?

固定语句用于的上下文中。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));
            }
        }
    }
}
publicstaticvoidpointymethod(char[]数组)
{
不安全的
{
固定(char*p=array)
{

对于(int i=0;我想知道为什么需要明确指定代码块/方法是不安全的,编译器在看到固定语句时必须知道它。true,但我相信它无法推断上下文,即方法、类型或代码块。不过这只是猜测。编译器可以用不安全语句automagic包装固定语句ally,如果它有任何价值的话。也许在不安全代码的掩护下还有其他一些操作,这可能会使通用的“安全”代码运行缓慢,谁知道呢。