stackalloc
ist ein Schlüsselwort in C#, das es Entwicklern ermöglicht, Speicherplatz auf dem Stack für einfache Datenstrukturen wie Arrays zu reservieren. Dies geschieht zur Laufzeit und bietet eine effiziente Möglichkeit, temporäre Daten zu verwalten, ohne den Garbage Collector zu belasten.
stackalloc
wird verwendet, um Arrays von Werttypen direkt im Stack-Speicher zu allokieren. Dies hat den Vorteil, dass der Speicher sofort freigegeben wird, wenn der aktuelle Kontext verlassen wird (z.B. beim Verlassen einer Methode). Es eignet sich besonders für Performance-kritische Anwendungen, wo häufige Speicherzuweisungen und -freigaben erforderlich sind.
Um stackalloc
zu verwenden, muss es innerhalb eines unsicheren Kontextes (unsafe) oder in einem Kontext mit einem Span<T>
-Typ verwendet werden. Es kann nur für Werttypen verwendet werden und ist nicht für Referenztypen geeignet.
Span<T> span = stackalloc T[n];
Hierbei ist T
der Typ der Werte und n
die Anzahl der Elemente.
stackalloc
kann nur in Methoden verwendet werden.public void Beispiel()
{
Span<int> zahlen = stackalloc int[5];
for (int i = 0; i < zahlen.Length; i++)
{
zahlen[i] = i * 10;
}
foreach (var zahl in zahlen)
{
Console.WriteLine(zahl);
}
}
public void Summiere(int anzahl)
{
Span<int> werte = stackalloc int[anzahl];
for (int i = 0; i < anzahl; i++)
{
werte[i] = i + 1;
}
int summe = 0;
for (int i = 0; i < werte.Length; i++)
{
summe += werte[i];
}
Console.WriteLine($"Die Summe ist: {summe}");
}
stackalloc
Speicher im Stack allokiert, ist die Größe begrenzt. Zu große Arrays können zu einem Stack Overflow führen.stackalloc
in einem unsicheren Kontext verwendet wird, müssen Sie sicherstellen, dass Ihr Projekt für unsicheren Code konfiguriert ist.stackalloc
ist in C# 7.2 und späteren Versionen verfügbar.stackalloc
ermöglicht die effiziente Allokation von Arrays im Stack, was die Leistung von temporären Datenstrukturen in C# verbessert.