csharp / expert
Snippet
Speichereffiziente Varianten-Implementierung
Auf Expertenebene ermöglicht C# eine hardwarenahe Speicherverwaltung mittels `StructLayout`. Ein explizites Layout erlaubt es, dass sich mehrere Felder im Speicher überlappen, wodurch effektiv eine 'Union' wie in C++ entsteht. Dies ist entscheidend für Hochleistungsszenarien, in denen der Speicherbedarf für große Sammlungen polymorpher Datentypen minimiert werden muss.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)]public struct TaggedUnion{[FieldOffset(0)] public byte TypeIndicator;// Both fields share the same memory location (offset 1)[FieldOffset(1)] public int IntegerValue;[FieldOffset(1)] public float FloatValue;public static TaggedUnion FromInt(int val) =>new TaggedUnion { TypeIndicator = 0, IntegerValue = val };public static TaggedUnion FromFloat(float val) =>new TaggedUnion { TypeIndicator = 1, FloatValue = val };}
Erklärung
1
[StructLayout(LayoutKind.Explicit)]
Teilt der Laufzeitumgebung mit, dass Feldpositionen manuell definiert werden, anstatt sie automatisch zu berechnen.
2
[FieldOffset(1)]
Gibt die genaue Byte-Position an, an der das Feld beginnt, wodurch verschiedene Typen denselben Speicherplatz belegen können.