Aracılığıyla paylaş


stackalloc (C# Başvurusu)

stackalloc Anahtar sözcüğünü güvensiz kod bağlamında yığın bellek bloğunu ayırmak için kullanılır.

int* block = stackalloc int[100];

Notlar

Anahtar sözcüğü yalnızca yerel değişken başlatıcı içinde geçerlidir.Aşağıdaki kod, derleyici hatalarına neden olur.

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

İşaretçi türleri dahil olduğundan, stackalloc gerektiren güvensiz içerik.Daha fazla bilgi için bkz. Güvenli Olmayan Kod ve İşaretçiler (C# Programlama Kılavuzu).

stackallocbenzer _alloca c Çalışma Zamanı Kitaplığı'nda.

Aşağıdaki örnek, hesaplar ve ilk 20 sayıları Fibonacci sırayla görüntüler.Her sayı önceki iki sayı toplamıdır.Kodda, bir tür 20 öğeleri içerecek şekilde yeterli boyutta bellek bloğu int yığın yığın üzerinde tahsis edilir.Adres bloğu için işaretçiyi depolanan fib.Bu bellek çöp toplama tabi değildir ve bu nedenle sabitlenmiş gerekmez (kullanarak sabit).Bellek bloğu sonu tanımladığından yöntemin yaşam süresi sınırlıdır.Döndüreceðini önce bellek ayıramaz.

Örnek

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

Güvenlik

Güvenli olmayan kod güvenli alternatifler daha az güvenli olmasıdır.Ancak, kullanımını stackalloc ortak dil çalışma zamanı (clr) arabellek taşması algılaması özellikleri otomatik olarak etkinleştirir.İşlem bir arabellek taşması algılandığında, kötü amaçlı kod çalıştırılır şansını en aza indirmek için mümkün olduğunca hızlı bir şekilde sonlandırıldı.

C# dil belirtiminin

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Başvuru

C# Anahtar Sözcükleri

İşleç Anahtar Sözcükleri (C# Başvurusu)

Güvenli Olmayan Kod ve İşaretçiler (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu