Výraz stackalloc (C#-Reference)
stackalloc Klíčové slovo se používá v kontextu nebezpečný kód přidělit blok paměti v zásobníku.
int* block = stackalloc int[100];
Poznámky
Klíčové slovo je platný pouze v místní proměnné Inicializátory.Následující kód způsobující chyby kompilátoru.
int* block;
// The following assignment statement causes compiler errors. You
// can use stackalloc only when declaring and initializing a local
// variable.
block = stackalloc int[100];
Protože se jedná o typy ukazatele, stackalloc vyžaduje nebezpečných kontextu.Další informace naleznete v tématu Nebezpečný kód a ukazatele (Příručka programování C#).
stackallocje jako _alloca v knihovně C Runtime.
Následující příklad vypočítá a zobrazí prvních 20 čísel v sekvenci Fibonacci.Každé číslo je součet předchozích dvou čísel.Kód bloku paměti dostatečné velikosti 20 prvky typu int je přidělen v zásobníku nejsou haldy.Ukazatel je uložena adresa bloku fib.Tato paměť není předmětem uvolněné a proto nemusí být drženy (pomocí pevnou).Životnost blok paměti je omezena na dobu životnosti metodu, která ji definuje.Nelze uvolnit paměť, před metoda vrátí.
Příklad
class Test
{
static unsafe void Main()
{
const int arraySize = 20;
int* fib = stackalloc int[arraySize];
int* p = fib;
// The sequence begins with 1, 1.
*p++ = *p++ = 1;
for (int i = 2; i < arraySize; ++i, ++p)
{
// Sum the previous two numbers.
*p = p[-1] + p[-2];
}
for (int i = 0; i < arraySize; ++i)
{
Console.WriteLine(fib[i]);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/*
Output
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
*/
Zabezpečení
Je méně bezpečné než bezpečné alternativy nebezpečný kód.Však použití stackalloc automaticky povolí funkce zjišťování přetečení vyrovnávací paměti v společného jazykového modulu runtime (CLR).Pokud je zjištěno přetečení vyrovnávací paměti, bude proces ukončen co nejrychleji minimalizovat pravděpodobnost, že je spuštěn nebezpečný kód.
Specifikace jazyka C#
Další informace naleznete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.
Viz také
Referenční dokumentace
Operátor klíčová slova (C#-Reference)
Nebezpečný kód a ukazatele (Příručka programování C#)