CodeBlanks Logo Icon CodeBlanks

stackalloc

C# kursu · Uzman · Ders 10/47

stackalloc ile yığında dizi ayırmayı öğrenirsin.

stackalloc nedir?

stackalloc, yığında (stack) bir bellek bloğu ayırır; bu, heap yerine yığın bölgesini kullanır. int* buf = stackalloc int[4]; 4 int yer ayırır ve işaretçiyi döndürür.

Yığın tahsisi GC baskısı yaratmaz; blok metot çıkışında otomatik temizlenir. Yalnızca unsafe bağlamda kullanılabilir ve sınırları aşmak güvenli değildir; bu yüzden dikkatli kullanılır.

stackalloc ve Span

Modern C#'ta stackalloc sonucu doğrudan Span<T>'ye atanabilir: Span<int> buf = stackalloc int[4];. Bu, unsafe bağlam gerektirmeden yığın tahsisini güvenli biçimde kullanmanı sağlar.

Span sınırları denetlediği için taşma riski yoktur. Bu yöntem çoğu durumda işaretçili stackalloc'a tercih edilir ve kodun hem güvenli hem hızlı olmasını sağlar.

Uygulama stackalloc ile değer topla

Main'i unsafe yap. int* buf = stackalloc int[2]; ile 2 int ayır. buf[0] = 5; buf[1] = 9; ata, Console.WriteLine(buf[0] + buf[1]); ile toplamı yazdır.

Örnek çözümü göster
unsafe static void Main() { int* buf = stackalloc int[2]; buf[0] = 5; buf[1] = 9; Console.WriteLine(buf[0] + buf[1]); }
Örnek çözüm:
using System;

class Program
{
    unsafe static void Main()
    {
        int* buf = stackalloc int[2];
        buf[0] = 5;
        buf[1] = 9;
        Console.WriteLine(buf[0] + buf[1]);
    }
}

Kendini test et

  1. Bellek bölgelerini eşleştir

    stackalloc
    Yığında ayırır
    heap
    GC tarafından yönetilir
    stack
    Metot çıkışında temizlenir
    int*
    int işaretçi
  2. stackalloc belleği nereye ayırır?

    • Yığın (stack)
    • Heap
    • LOH
    • Yönetilen dizi
    Cevabı göster

    Yığın (stack) — Doğru. stackalloc yığında ayırır, heap'i kullanmaz.

  3. stackalloc bildirimi

    int* buf = ____ int[4];
    Cevabı göster
    int* buf = stackalloc int[4];

Uzman bölümündeki tüm dersler