Unsafe.AsPointer und blittable-Werttypen, die von ref übergeben werdenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Unsafe.AsPointer und blittable-Werttypen, die von ref übergeben werden

Post by Anonymous »

Ich schreibe hier etwas Code und bin zum Nachdenken gekommen. Wahrscheinlich liege ich mit meiner Annahme falsch, deshalb hätte ich gerne noch andere Augen und Meinungen.
Ich habe das:

Code: Select all

void Write(Buffer buffer, ref readonly T value, int offset)
where T : unmanaged
{
byte* valuePtr = (byte *)Unsafe.AsPointer(in value);
NativeMemory(valuePtr, buffer.Pointer + offset, sizeof(T));
}
Jetzt sollte dies sicher sein, weil:
  • Es ist ein blittable-Werttyp (erzwungen durch die nicht verwaltete Einschränkung für T).
  • Da es ein Parameter ist, sollte er auf dem Stapel liegen und nicht vom GC verschoben werden (also ich). nehmen an)
Wenn also das oben Gesagte wahr ist, sollte es sicher sein, Unsafe.AsPointerhier zu verwenden, oder? Könnten Sie mir sagen, ob ich hier auf dem richtigen Weg bin oder ob mir etwas fehlt?
Mir ist bewusst, dass ich „Fixed“ verwenden kann. Aber ich bin eher gespannt, ob ich mit meiner Denkweise an dieser Stelle richtig liege.

Code: Select all

fixed
Version:

Code: Select all

void Write(Buffer buffer, ref readonly T value, int offset)
where T : unmanaged
{
fixed (T* valuePtr = &value)
{
NativeMemory(valuePtr, (byte*)buffer.Pointer + offset, sizeof(T));
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post