Оглавление:
Определение - Что значит небезопасный?
Небезопасное - это ключевое слово языка программирования C (C #), используемое для обозначения части кода, которая не управляется средой CLR для .NET Framework или неуправляемым кодом. Небезопасный используется в объявлении типа или члена или для указания кода блока. Когда используется для указания метода, контекст всего метода небезопасен.
Небезопасный код обеспечивает хорошую совместимость с неуправляемыми интерфейсами прикладного программирования (API) или системными вызовами и служит совместимым интерфейсом для сторонних динамически подключаемых библиотек (DLL), которые требуют указателей для передачи параметров. Небезопасный код также может использоваться во время отладки, когда содержимое процесса требует проверки или анализа.
Техопедия объясняет небезопасность
Небезопасные данные относятся к данным выделенной памяти, которые не контролируются CLR, таким как дескрипторы Windows или указатели, выделенные с помощью нового метода.
Небезопасный код относится к оператору или методу, который обращается к неуправляемой памяти, включая:
- Призывы к Windows API
- Вызывает компоненты интерфейса метода COM (объектная модель компонентов), включающие структуры с указателями или критичный к производительности код.
Небезопасный код в основном используется, когда в операциях используются указатели, и, как правило, когда код выполняется вне управляемого контекста. Небезопасная компиляция кода требует указания опции / unsafe с помощью команды компиляции.
В полностью доверенных средах CLR требуется для небезопасного выполнения кода. Однако CLR не проверяет небезопасный код. CLR поддерживает небезопасный код для обеспечения прямого доступа к неуправляемому коду памяти, который иногда предпочтителен по соображениям производительности.
Поскольку CLR поддерживает безопасность типов и безопасность, C # не поддерживает арифметику указателей в управляемом коде, в отличие от C / C ++. Ключевое слово unsafe позволяет использовать указатель в неуправляемом коде. Однако безопасность не гарантируется, поскольку не соблюдаются строгие правила доступа к объектам. Например, возможности работы с указателем не предоставляются в Java Runtime Environment (JRE).
Небезопасный код может создавать проблемы со стабильностью и безопасностью из-за присущего ему сложного синтаксиса и возможности ошибок, связанных с памятью, таких как переполнение стека, доступ к системной памяти и ее перезапись. Дополнительная забота разработчика имеет первостепенное значение для предотвращения потенциальных ошибок или угроз безопасности.