У меня есть это:
void Write(Buffer buffer, ref readonly T value, int offset)
where T : unmanaged
{
byte* valuePtr = (byte *)Unsafe.AsPointer(in value);
NativeMemory.Copy(valuePtr, buffer.Pointer + offset, sizeof(T));
}
Теперь должно безопасно делать это, потому что:
- Это преобразуемый тип значения (обеспечиваемый неуправляемым ограничением на T).
- Поскольку это параметр, он должен находиться в стеке и не должен перемещаться сборщиком мусора (поэтому Я предполагаю)
Я знаю, что могу использовать фиксированный. Но мне больше интересно узнать, прав ли я в своих мыслях на данный момент.
fixed версия:
void Write(Buffer buffer, ref readonly T value, int offset)
where T : unmanaged
{
fixed (T* valuePtr = &value)
{
NativeMemory.Copy(valuePtr, (byte*)buffer.Pointer + offset, sizeof(T));
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... sed-by-ref
Мобильная версия