csharp / expert
Snippet
Explizite Struct-Layouts für Speicherüberlagerungen
Beim Experten-Performance-Tuning ermöglicht LayoutKind.Explicit die Kontrolle über den exakten Speicher-Offset von Feldern. Dies erzeugt C-Style 'Unions', bei denen sich mehrere Felder denselben Speicherplatz teilen, was eine hochperformante Typ-Reinterpretation ohne Allokationen ermöglicht.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)]public struct ValueUnion{[FieldOffset(0)]public int IntegerVal;[FieldOffset(0)]public float FloatVal;[FieldOffset(0)]public byte ByteVal;}// Usagevar union = new ValueUnion { IntegerVal = 42 };Console.WriteLine(union.FloatVal); // Reinterprets the same 4 bytes as a float
Erklärung
1
[StructLayout(LayoutKind.Explicit)]
Weist die Runtime an, dass Feldpositionen manuell über Offsets definiert werden.
2
[FieldOffset(0)]
Platziert das Feld ganz am Anfang des Struct-Speicherblocks, was zu Überlappungen führt.