Udostępnij za pośrednictwem


stackalloc (odwołanie w C#)

stackalloc Użyć słowa kluczowego w kontekście niebezpieczny kod zaalokować blok pamięci na stosie.

int* block = stackalloc int[100];

Uwagi

Słowo kluczowe jest prawidłowy tylko w inicjatory zmiennej lokalnej.Poniższy kod powoduje błędy kompilatora.

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];

Ponieważ zaangażowane są typami wskaźników, stackalloc wymaga niebezpieczne kontekstu.Aby uzyskać więcej informacji, zobacz Niebezpieczny kod i wskaźniki (Przewodnik programowania w języku C#).

stackallocprzypomina _alloca w bibliotece uruchomieniowej C.

Poniższy przykład oblicza i wyświetla pierwszych 20 liczby w sekwencji Fibonacciego.Każda liczba jest sumą dwóch poprzednich liczbach.W kodzie blok pamięci o wystarczającej wielkości, zawierać 20 elementów tego typu int jest przydzielana na stosie nie sterty.Adres bloku znajduje się wskaźnik fib.Pamięć ta nie jest przedmiotem wyrzucania elementów bezużytecznych i nie jest więc zostać unieruchomiony (za pomocą stałej).Okres istnienia blok pamięci jest ograniczony do okresu istnienia metodę, która definiuje ją.Nie można zwolnić pamięć, zanim metoda zwraca wartość.

Przykład

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
*/

Zabezpieczenia

Niebezpieczny kod jest mniej bezpieczne niż bezpiecznych alternatyw.Jednakże użycie stackalloc automatycznie włącza funkcje wykrywania przepełnienie buforu w common language runtime (CLR).Po wykryciu przepełnienia buforu, proces jest zakończony tak szybko jak to możliwe, aby zminimalizować prawdopodobieństwo, że złośliwy kod jest wykonywany.

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

Słowa kluczowe języka C#

Słowa kluczowe operatora (odwołanie w C#)

Niebezpieczny kod i wskaźniki (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Odwołanie w C#