stackalloc
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
-
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
-
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.
-
stackalloc bildirimi
int* buf = ____ int[4];Cevabı göster
int* buf = stackalloc int[4];