В чем разница между небезопасным кодом и неуправляемым кодом в С#?

В чем разница между небезопасным кодом и неуправляемым кодом в С#?

Ответы

Ответ 1

управляемый код запускается под наблюдением CLR (Common Language Runtime). Это отвечает за такие вещи, как управление памятью и сбор мусора.

Так неуправляемый просто выполняется за пределами контекста CLR. небезопасный - это "промежуточный" управляемый и неуправляемый. небезопасная все еще работает под CLR, но она позволит вам получить доступ к памяти непосредственно через указатели.

Ответ 2

Небезопасный код на С# позволяет использовать указатели. В контексте CLR в С# нет неуправляемого кода.

Ответ 3

Небезопасный код запускается внутри CLR, тогда как неконтролируемый код запускается вне CLR.

Пример небезопасного кода:

unsafe class MyClass
{
    private int * intPtr;
}

Вы можете использовать указатели в любом месте этого класса.

Примером неуправляемого кода является:

class MyClass
{
    [DllImport("someUnmanagedDll.dll")]
    static extern int UnManagedCodeMethod(string msg, string title);

    public static void Main() 
    {
        UnManagedCodeMethod("calling unmanaged code", "hi");
    }
}

Это не обязательно неуправляемый код, но его вызов.

Ответ 4

Небезопасный - код, который может находиться за пределами проверяемого подмножества CIL

Неуправляемый - код, который не управляется средой выполнения и поэтому не виден в GC (например, нативная скомпилированная функция x86 будет неуправляемой).

из: http://forums.devx.com/archive/index.php/t-15405.html