В чем разница между небезопасным кодом и неуправляемым кодом в C#?В чем разница между небезопасным кодом и неуправляемым кодом в C#?
ответ
управляемый код работает под контролем CLR (Common Language Runtime). Это отвечает за такие вещи, как управление памятью и сбор мусора.
Так неуправляемый просто выполняется за пределами контекста CLR. небезопасный - это «промежуточный» управляемый и неуправляемый. небезопасная по-прежнему работает под CLR, но она позволит вам получить доступ к памяти непосредственно через указатели.
Небезопасный код на C# позволяет использовать указатели. В контексте CLR в C# нет неуправляемого кода.
Я всегда понимал «неуправляемый» код как код, который не выполняет в контексте CLR ... В принципе, как звонки в ++ библиотек DLL и такие C/C. –
Я полностью согласен. Вы не будете P/Invoking любых DLL C#, хотя, только C/C++, как вы упомянули. –
небезопасного - код, который может быть вне проверяемым подмножества MSIL
Неуправляемых - код, который не управляется во время выполнения и, таким образом, не видно к ОМУ (например, родная скомпилирована функция x86 будет неуправляемой .)
вы используете что-то вроде pinvoke для запуска неуправляемого кода в .net – Hal
Да, но вы также можете определить внешние функции с атрибутами DLLImport, чтобы вносить и подключаться к родным DLL; класс дескрипторов функции extern может использоваться как управляемая «оболочка» для собственного кода. – KeithS
небезопасного кода запускается внутри 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");
}
}
Это не обязательно сам неуправляемый код, но называть его.
Вот что вы можете сделать в небезопасном контексте.
http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx
- 1. В чем разница между кодом
- 2. В чем разница между управляемым/байт-кодом и неуправляемым/родным кодом?
- 3. В чем разница между данными и кодом?
- 4. В чем разница между машинным кодом и кодом операции?
- 5. В чем разница между байт-кодом и объектным кодом?
- 6. В чем разница между нижеприведенным кодом 1 и кодом 2?
- 7. В чем разница между кодом сборки и байт-кодом?
- 8. В чем разница между кодом компиляции и исполняемым кодом?
- 9. JAVA: В чем разница между байтовым кодом и двоичным кодом?
- 10. Быстрый обмен данными между неуправляемым кодом и управляемым кодом
- 11. двухсторонняя связь между неуправляемым кодом и кодом единства3d
- 12. Звонок между управляемым и неуправляемым кодом
- 13. Попутный структуры между управляемым и неуправляемым кодом
- 14. В чем разница между следующим кодом
- 15. Разница между объектным кодом и встроенным кодом?
- 16. В чем разница между собственным кодом, машинным кодом и кодом сборки?
- 17. В чем разница между объектным кодом, скомпилированным кодом и машинным кодом
- 18. CLR SP с неуправляемым кодом
- 19. управляемый system.timer над неуправляемым кодом
- 20. Пользовательский Direct2D рендерит партию маршалинга между управляемым и неуправляемым кодом
- 21. В чем разница между этим кодом и этой формулой?
- 22. В чем разница между кодом PIC и `ld -r`?
- 23. В чем разница между исходным кодом и DOM?
- 24. JavaScript - В чем разница между анонимной функцией и обычным кодом?
- 25. В чем разница между самомодифицирующимся кодом и отражением?
- 26. В чем разница между сборкой и двоичным кодом?
- 27. В чем разница между службами прерывания ISR и обычным кодом?
- 28. В чем разница между метаморфическим и полиморфным кодом?
- 29. В чем разница между кодом в javascript onchange и тем же кодом в функции?
- 30. Обмен транзакциями DB между управляемым и неуправляемым кодом
@NullUserExceptin: спасибо, это действительно полезно для меня – ashish
Что вы подразумеваете под «контекстом»? С C++/CLI вы можете смешивать управляемый и неуправляемый (собственный) код в одной сборке в одном процессе. – Niki
Сборка C++/CLI, скомпилированная с помощью опции/clr: safe (безопасный режим), гарантирует, что созданный код IL проверяется и безопасен по типу. По сути, безопасная сборка не может содержать каких-либо функциональных возможностей, которые будут принадлежать небезопасному блоку C#, например, арифметике указателя. Чтобы использовать такую функциональность, необходимо скомпилировать в чистом режиме с помощью/clr: pure (сборка в чистом режиме является полностью IL, но может связываться с родными dll, привязка статически к родным DLL в чистом режиме невозможна?) Или mixed-mode/clr (который может не только ссылаться на собственный код, но и включать его в сборку). – Protongun