Sdílet prostřednictvím


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

Klíčová slova jazyka C#

Operátor klíčová slova (C#-Reference)

Nebezpečný kód a ukazatele (Příručka programování C#)

Koncepty

Příručka programování C#

Další zdroje

C#-Reference