Книга: 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) {
- Фиксация расположения окна браузера
- Синхронизация доступа к куче
- Графическая фиксация дискуссии для вовлечения людей в работу
- 7.2. Привлечение внимания и фиксация интереса ЛПР. Приемы № 57–67
- Когда у человека есть выбор, высокая плотность посетителей не воспринимается как скученность
- Фиксация внимания собеседника
- 18. Рабочие встречи, посвященные управлению проектом Фиксация этапов работ по проекту при помощи изображений
- 8.5. Фиксация ошибок
- Фиксация внимания на главных задачах
- Авторы решения и фиксация факта его принятия
- Фиксация видеокамеры
- Скученность в связи с неправильной планировкой наносит наибольший вред