Koray ÜSTÜNDAĞ

KORAY ÜSTÜNDAĞ

C# Unsafe Code Nedir?

C#, genellikle güvenlik odaklı bir programlama dilidir ve geliştiricilere güvenli bir ortam sunar. Ancak bazen düşük seviyeli bellek manipülasyonu veya platforma özgü işlemler yapmak gerekebilir. İşte bu noktada “Unsafe Code” devreye girer.

Unsafe Code Nedir?

Unsafe code (güvensiz kod), C# programcılarına doğrudan bellek erişimi sağlayan bir özelliktir. Bu, genellikle bellek manipülasyonu veya platforma özgü işlemler yapmanın gerektiği özel durumlar için kullanılır. Unsafe code kullanırken programın güvenlik denetimlerinden kaçınılır ve bellek erişimi manuel olarak yapılabilir.

Unsafe Code Kullanım Alanları

Unsafe code, aşağıdaki durumlarda kullanışlı olabilir:

  • Bellek Yönetimi: Bellek tahsisini manuel olarak kontrol etmek veya bellek temizliği gerektiren özel senaryolar için.
  • Platforma Özgü İşlemler: Platforma özgü API’ler veya donanım ile iletişim kurma gereksinimleri için.
  • Performans İyileştirmeleri: Düşük seviyeli bellek manipülasyonu yaparak performansı artırma ihtiyacı.

 

Unsafe Code kullanırken, programın güvenliğinden vazgeçtiğinizi unutmamalısınız ve bu özelliği yalnızca ihtiyaç duyduğunuz özel senaryolarda kullanmalısınız. Güvenlik her zaman öncelikli olmalıdır ve Unsafe Code kullanımında dikkatli olmak önemlidir.

Örnekler:

“Unsafe Code” kullanırken, aşağıdaki gibi C#’ın normal güvenlik denetimlerini atlayan kod parçacıkları oluşturabilirsiniz:

				
					unsafe
{
    // Unsafe kodunuzu burada kullanabilirsiniz.
}
				
			

Pointer kullanarak dizi elemanlarına erişim sağlama

				
					unsafe
{
    int[] numbers = new int[3] { 1, 2, 3 };

    fixed (int* p = numbers)
    {
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(*(p + i));
        }
    }
}
				
			

Belleğe alan tahsis eden, değiştiren ve bellekten silme

Bu örnek, “unsafe” kodu kullanarak belleğe alan tahsis etmeyi, bu alanda veri değiştirmeyi ve belleği temizlemeyi göstermektedir. Bu örnekte bir pointer kullanarak bir dizi işaret edilmemiş tam sayı oluşturulur ve veriler belleğe yazılır, sonra bellek temizlenir.

				
					using System;
using System.Runtime.InteropServices;

internal class Program
{
    static void Main(string[] args)
    {
        unsafe
        {
            int length = 5;

            // Bellekte alan tahsis et
            int* data = (int*)Marshal.AllocHGlobal(length * sizeof(int));

            // Veriyi doldur
            for (int i = 0; i < length; i++)
            {
                data[i] = i * i;
            }

            // Veriyi yazdır
            for (int i = 0; i < length; i++)
            {
                Console.WriteLine(data[i]);
            }

            // Bellek temizle
            Marshal.FreeHGlobal((IntPtr)data);
        }
        Console.ReadLine();
    }
}
				
			

Bu örnekte, Marshal.AllocHGlobal yöntemi ile bellekte alan tahsis edilir ve Marshal.FreeHGlobal yöntemi ile bellek temizlenir. IntPtr kullanarak işaretçiyi Marshal sınıfının yöntemine dönüştürmemiz gereklidir.

Marshal.FreeHGlobal((IntPtr)data); kodu çağrıldığında, bellekte tahsis edilen alan serbest bırakılır ve o alandaki verilere erişim güvenli bir şekilde engellenir. Ancak bazı durumlarda, bu alana erişim hala mümkün olabilir. Bu, tamamen bellek yönetimi ve işletim sistemi tarafından belirlenen bir davranıştır ve kesin sonuçlar sistem ve derleyiciye bağlı olarak değişebilir.

Birçok modern işletim sistemi ve derleyici, serbest bırakılan bellek bloğuna erişim girişimlerini algılayabilir ve bu tür girişimleri hata oluşturarak işaretleyebilir veya uygulamayı sonlandırabilir. Ancak bu davranışın garantisi yoktur ve tamamen sistem tarafından sağlanır.

Bu nedenle, serbest bırakılmış bellek bloğlarına erişmeye çalışmamalı ve serbest bırakma işleminden sonra bu tür erişimlerden kaçınmalısınız. Bellek yönetimi ve güvenliği önemlidir ve belirli durumlarda bu tür erişimler beklenmeyen sonuçlara yol açabilir. Bu tür erişimlerin yapılmaması ve bellek yönetimi kurallarına uyulması genellikle daha güvenli bir yaklaşımdır.

Daha fazla bilgi için Microsoft Learn‘e göz atabilirsiniz.

Şimdi Paylaş

Facebook
Twitter
LinkedIn

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir