Книга: C# для профессионалов. Том II

Фиксация донных в куче

Фиксация донных в куче

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

class MyClass {
 public int X; // и т.д.
}
// где-то в другом месте кода
MyClass Mine = new MyClass(); // выполнить обработку
fixed (int *pX = Mine.X) {
 // можно использовать рХ в этом блоке
}

Возможно вкладывание блоков fixed для объявления более одного указателя. Можно также объявить более одного указателя в одной инструкции fixed при условии, что оба указателя имеют один тип объекта ссылки.

fixed (int *рХ = Mine.X, *рХ2 = Mine2.X) {

Оглавление книги


Генерация: 3.722. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз