Доброй ночи коллеги!
Тема конечно не нова
и обсуждалась уже не раз, например:
http://rsdn.ru/forum/dotnet/3200048.1.aspxАвтор: ajanov
Дата: 04.12.08
но! Все представленные решения грешат тем, что что-то создают, т.е. явно или неявно выделяют память. Встречаются new IntPtr(), GCHandle.Alloc() и другие.
Встроенные решения .NET тоже не дают желаемого. Мне нужно отправить по сети 100 интов и нет времени выделять 100 массивов по 4 байта, как это делает наприер BitConverter. Хочется получить какое то решение, которое бы не требовало создания объектов, структур, выделения дополнительной памяти и было бы универсальным для структур, а не только для интов. Как быть?
Здравствуйте, adontz, Вы писали:
A>А почему бы вам не использовать unsafe указатели?
Если я правильно понял, сборщик мусора может взять мой массив и переместить его в другое место прямо посреди операции записи туда. И тогда часть данных попадёт куда надо, а другая — куда не надо. Пока писал этот ответ, нашел решение:
fixed. Спасибо за подсказку!
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>А почему бы вам не использовать unsafe указатели?
А можно ли их использовать с дженериками?
where T : struct
не спасает
Здравствуйте, Аноним, Вы писали:
А>А можно ли их использовать с дженериками? where T : struct
не спасает
Можно попробовать завести обычный (не дженерик) базовый класс. Хотя как оно в памяти разложится фиг его знает.
Здравствуйте, Аноним, Вы писали:
А>А можно ли их использовать с дженериками? where T : struct
не спасает
Нет. Но требуемые перегрузки можно сгенерировать с помощью T4.