В чем разница между небезопасным кодом и неуправляемым кодом в С#?
В чем разница между небезопасным кодом и неуправляемым кодом в С#?
Ответы
Ответ 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
Ответ 5
Вот что вы можете сделать в небезопасном контексте.
http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx