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 operatora (odwołanie w C#)
Niebezpieczny kod i wskaźniki (Przewodnik programowania w języku C#)
Koncepcje
Przewodnik programowania w języku C#