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