Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 19:30   #1
Voipp
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 32
По умолчанию директива fixed

не могу разобраться, в каких случаях следует обязательно использовать эту директиву для указателей, а в каких нет ?
Voipp вне форума Ответить с цитированием
Старый 19.07.2013, 09:53   #2
Alex_Aske
Новичок
Джуниор
 
Регистрация: 19.07.2013
Сообщений: 1
По умолчанию

Оператор fixed задает указатель на управляемую переменную и "закрепляет" эту переменную во время выполнения оператора. Без fixed, указатели на управляемые переменные в куче были бы мало полезны, так как при сборке мусора переменные переносились бы непредсказуемым образом. Из этого и следует, когда оператор fixed нужно использовать.
Alex_Aske вне форума Ответить с цитированием
Старый 19.07.2013, 10:53   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цитата:
Сообщение от Шилдт Г. - C# 4.0 полное руководство - 2011
Применение модификатора fixed
В работе с указателями нередко используется модификатор fixed, который
препятствует удалению управляемой переменной средствами "сборки мусора". Потребность
в этом возникает, например, в том случае, если указатель обращается к полю в объекте
определенного класса. А поскольку указателю ничего не известно о действиях системы
"сборки мусора", то он будет указывать не на тот объект, если удалить нужный объект.
Ниже приведена общая форма модификатора fixed:
fixed (тип* р = 5сфиксированный_объект) {
// использовать фиксированный объект
}
где р обозначает указатель, которому присваивается адрес объекта. Этот объект будет
оставаться на своем текущем месте в памяти до конца выполнения кодового блока.
В качестве адресата оператора fixed может быть также указано единственное
выражение, а не целый кодовый блок. Модификатор fixed допускается использовать только
в коде, помеченном как небезопасный. Кроме того, несколько указателей с
модификатором fixed могут быть объявлены списком через запятую.
Ниже приведен пример применения модификатора fixed.
// Продемонстрировать применение оператора fixed,
using System;
class Test {
public int num;
public Test (int i) { num = i; }
}
class FixedCode {
// Пометить метод Main() как небезопасный,
unsafe static void Main() {
Test о = new TestA9);
fixed (int* p = &o.num) { // использовать модификатор fixed для размещения
// адреса переменной экземпляр о.num в переменной р
Console.WriteLine("Исходное значение переменной о.num: " + *р);
*р = 10; // присвоить значение 10 переменной count,
//на которую указывает переменная р
Console.WriteLine("Новое значение переменной о.num: " + *р);
}
}
}
Вот к какому результату приводит выполнение этой программы.
686 Часть I. Язык С#
Исходное значение переменной o.num: 19
Новое значение переменной o.num: 10
В данном .примере модификатор fixed препятствует удалению объекта о. А
поскольку переменная р указывает на переменную экземпляра о . num, то она будет
указывать на недостоверную область памяти, если удалить объект о.
10 символов
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как ограничить background-attachment-fixed prostonick HTML и CSS 2 22.06.2012 17:55
position: fixed; и виджет like Вконтакте Кольша HTML и CSS 1 04.02.2012 17:45
Div с position:fixed shilinpavel HTML и CSS 1 03.12.2011 22:39
ios::fixed Niksan Общие вопросы C/C++ 1 24.05.2011 13:40
Блок с position: fixed; пропадает в Chrome Sphinks02 HTML и CSS 6 08.02.2011 08:11