Каковы последствия использования небезопасного кода - PullRequest
23 голосов
/ 01 апреля 2009

Помимо того, что сам код может напрямую обращаться к памяти. Каковы другие последствия использования флага компилятора "/ unsafe" и ключевого слова "fixed"? Есть ли какие-либо эффекты, связанные с подписанием кода и развертыванием моего .exe (мое приложение только для рабочего стола)?

(Дело не в том, должен ли я это делать, , почему рассматривается в моем вопросе здесь )

Ответы [ 3 ]

14 голосов
/ 01 апреля 2009

Вы можете поместить значения в два ведра.

Во-первых, как это влияет на среду вашего приложения. Использование небезопасного кода требует, чтобы ваша сборка выполнялась в среде полного доверия. Невозможно работать в ограниченной среде, такой как определенные настройки безопасности Click Once. Причина в том, что небезопасный код не позволяет CLR обеспечивать безопасность типов. Нажмите Один раз, хотя без ограничений безопасности не должно возникнуть проблем.

Второе - это то, что это значит для того, как вы кодируете. Использование небезопасного кода обычно включает использование указателей и, в частности, их использование для выполнения расширенного маршалинга через PInvoke. Нет ничего плохого в этих действиях. Это просто требует значительно большего понимания CLR и сортировки, чем «безопасный» код. Объектное закрепление - отличный пример знаний, которые вам необходимо прочно освоить, прежде чем начать использовать эти функции.

6 голосов
/ 01 апреля 2009

Небезопасный код не подлежит проверке, поэтому вы должны знать об этом. В среде полного доверия это не имеет большого значения, но если у вас есть другие среды с более ограниченным набором разрешений, это может повлиять на вас.

3 голосов
/ 01 апреля 2009

Добавить к ссылке Джареда на закрепление объекта ...

При использовании указателей для доступа к памяти непосредственно в C # вы уязвимы для CLR, перемещающего объект в памяти во время выполнения. Это означает, что ваш указатель может внезапно указать на неправильный раздел памяти. Ключевое слово Fixed закрепит объект в памяти, чтобы избежать этой проблемы.

...