capypad
0 Tage Serie
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
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.