fixed deyimi
fixed ile yönetilen nesneyi sabitlemeyi öğrenirsin.
fixed deyimi
Yönetilen bir dizinin (ör. int[]) adresini almak için fixed deyimi kullanılır. fixed, GC'nin o nesneyi bellekte sabitmesini (pin) sağlar; böylece işaretçi geçerli kalır.
Blok bitince sabitleme kaldırılır ve GC tekrar taşıyabilir. fixed olmadan işaretçi, GC'nin taşıması sonucu geçersiz adrese işaret edebilir; bu yüzden dizi ile işaretçi kullanımı her zaman fixed ile yapılır.
Sabitleme süresi
fixed bloğu içindeki kod çalıştığı sürece nesne sabitlenir. Blok çıkışında (ister normal ister istisra ile) sabitleme otomatik kaldırılır.
Uzun süreli sabitleme GC'nin bellek sıkıştırmasını engeller; bu yüzden fixed blokları kısa tutulur. Mümkünse Span<T> gibi sabitleme gerektirmeyen alternatifler tercih edilir; bu hem güvenliği hem de performansı dengeler.
Uygulama fixed ile ilk elemanı yazdır
Main'i unsafe yap. int[] arr = { 10, 20, 30 }; tanımla. fixed (int* p = &arr[0]) bloğu aç ve Console.WriteLine(*p); ile ilk elemanı yazdır.
Örnek çözümü göster
unsafe static void Main() { int[] arr = {10,20,30}; fixed (int* p = &arr[0]) { Console.WriteLine(*p); } }
Örnek çözüm:
using System;
class Program
{
unsafe static void Main()
{
int[] arr = { 10, 20, 30 };
fixed (int* p = &arr[0])
{
Console.WriteLine(*p);
}
}
}
Kendini test et
-
fixed ne işe yarar?
- Yeni nesne oluşturur
- Metodu durdurur
- Thread bekletir
- Yönetilen nesneyi sabitler (pin)
Cevabı göster
Yönetilen nesneyi sabitler (pin) — Doğru. fixed, GC'nin nesneyi taşımasını engeller.
-
fixed deyimini tamamla
int[] arr = { 1, 2, 3 }; ____ (int* p = &arr[0]) { /* ... */ }Cevabı göster
int[] arr = { 1, 2, 3 }; fixed (int* p = &arr[0]) { /* ... */ } -
fixed kavramlarını eşleştir
- fixed
- Nesneyi sabitler
- pin
- Sabitleme terimi
- &arr[0]
- Dizi ilk eleman adresi
- int*
- int işaretçi