Небезопасный код

Одним из основных достоинств языка С# является его схема работы с памятью: автоматическое выделение памяти под объекты и автоматическая уборка мусора. При этом невозможно обратиться по несуществующему адресу памяти или вый­ти за границы массива, что делает программы более надежными и безопасными и исключает возможность появления целого класса ошибок, доставляющих мас­су неудобств при написании программ на других языках.

Однако в некоторых случаях возникает необходимость работать с адресами па­мяти непосредственно, например, при взаимодействии с операционной системой, написании драйверов или программ, время выполнения которых критично. Такую возможность предоставляет так называемый небезопасный (unsafe) код.

Небезопасным называется код, выполнение которого среда CLR не контролиру­ет. Он работает напрямую с адресами областей памяти посредством указателей и должен быть явным образом помечен с помощью ключевого слова unsafe, кото­рое определяет так называемый небезопасный контекст выполнения. Ключевое слово unsafe может использоваться либо как спецификатор, либо как оператор. В первом случае его указывают наряду с другими спецификаторами при описании класса, делегата, структуры, метода, поля и т. д. — везде, где допус­тимы другие спецификаторы. Это определяет небезопасный контекст для опи­сываемого элемента, например:

public unsafe struct Node

{

public int Value;

public Node* Left;

public Node* Right;

}

Вся структура Node помечается как небезопасная, что делает возможным исполь­зование в ней указателей Left и Right. Можно применить и другой вариант опи­сания, в котором небезопасными объявляются только соответствующие поля структуры:

public struct Node

{

public int Value;

public unsafe Node* Left;

public unsafe Node* Right;

}

Оператор unsafe имеет следующий синтаксис:

unsafe блок

Все операторы, входящие в блок, выполняются в небезопасном контексте.

ПРИМЕЧАНИЕ

Компиляция кода, содержащего небезопасные фрагменты, должна производиться с ключом /unsafe. Этот режим можно установить путем настройки среды Visual Studio (Project ► Properties ► Configuration Properties ► Build ► Allow Unsafe Code).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: