csharp / expert
Snippet
Fortgeschrittene Interop mit Unsafe-Pointern
Das Schlüsselwort 'unsafe' erlaubt C# die Durchführung von Zeigerarithmetik, ähnlich wie in C++. Die Verwendung von 'fixed' fixiert das verwaltete Objekt im Speicher und verhindert, dass der Garbage Collector es verschiebt, während Sie Speicheradressen direkt manipulieren.
snippet.csharp
1
2
3
4
5
6
7
8
9
public unsafe void FastCopy(byte[] src, byte[] dest) {fixed (byte* pSrc = src, pDest = dest) {byte* ps = pSrc;byte* pd = pDest;for (int i = 0; i < src.Length; i++) {*pd++ = *ps++;}}}
Erklärung
1
fixed (byte* pSrc = src, pDest = dest)
Fixiert die Arrays im Speicher, um GC-Verschiebungen während des Zeigerzugriffs zu verhindern.
2
*pd++ = *ps++;
Dereferenziert Zeiger direkt und inkrementiert sie, was einen Low-Level-C-Speicherkopiervorgang nachahmt.