Site icon IT Tutorial

C# TA POİNTER KULLANIMI VE BELLEK YÖNETİMİ

Değerli Arkadaşlar C# yazı dizimize devam ederken şimdide C ve C++ gibi dillerde çokça kullandığımız ve o dillerde olmazsa olmaz kavramlardan olan Pointer ları yani işaretçileri C# dilinde de göreceğiz şunu bilmenizi isterim yüksek seviyeli dillerden olan Java dilinde Pointer yoktur C# ta bu özellik tavsiye edilmese bile vardır yeri ve zamanı gelince önemli işlerde kullanılabiliyor.Şimdi Pointer lara giriş yapalım.

Öncellikle pointer Tam olarak nedir onu görelim.Pointer değişkenler, bellekte tutulan bir değerin adresini göstermektedirler.Bu konuyu daha iyi anlayabilmek için öncelikle belleğin (RAM’in) yapısını inceleyelim böylece bellekte bir yer tutma gibi ifadeler kullandığımızda bunun tam olarak ne anlama geldiğini daha iyi anlayacaksınız.

RAM’in Yapısı
Herhangi bir programlama dilinde bir program yazdık. Bu yazılımın exe dosyasını çalıştırdığımız zaman, harddiskte kayıtlı olan exe dosyası, çalışabilmek için öncelikle harddiskten daha  hızlı olan RAM’e kopyalanır ve RAM – işlemci arasında çalışmasını yapar. Kayıt işlemlerinde ise harddiske yazma komutuyla işlem yapılır.

Programımız çalıştığı zaman bellekte onun için belirli bir alan ayrılmamıştır. İşlemci, dosyayı RAM içerisine rastgele yerleştirir ve adres bilgilerini kaydeder. Programımızın istenen noktasına ulaşması gerektiğinde adrese gidip o veriyi kullanabilir.

Bilgisayar sistemlerinin bu kadar gelişmediği dönemlerde bellek yönetimi çok önemli bir konuydu. Büyük çaplı bir yazılım hazırlandığında belleğin dolma ihtimali olduğundan değişkenler kullanıldığı oranda bellekte tutulur, fonksiyonlar arasında değişken göndermesi sırasında değişkenin bir kopyası değil, adres bilgisi gönderilirdi. Adres bilgisini kısaca inceleyelim:

Basitçe inceleyecek olursak, bellek aşağıdaki gibi bir yapıya sahiptir. Yazılımımız içerisinde her değişken değerini bir kutucuğa yerleştirdiğimizi düşünelim (100% bu şekilde değildir). Bu değişkenlerin değerlerine ulaşabilmek için onların adres bilgilerine ihtiyacım olacaktır. Sol tarafta görünen “… 110A, 110B, … ,110F, …” değerleri, belleğimizin adres bilgileridir. Örnekte “110C” adresli kutucuğa 22 değeri aktarılmıştır.Bunu sizlerde çoğaltabilirsiniz.

  Bir değişkeni bir fonksiyondan diğerine göndermemiz gerektiğinde şöyle  şey yaparız:

private void function()
{

int x = 22;

another_function(x);

}

private void another_function(int y)
{
}

Bu işlem yapıldığında prosedürünün içinde tanımlanmış olan x adlı değişkenin değeri, another
_function adlı  fonksiyona gönderilirken bellekte another_function prosedürünün için bellekte metin isminde bir değişken oluşturulur, değeri de 22 olur.

Bu işlemi pointer ile yapmış olsaydık, another_function prosedürüne gönderdiğimiz değer x değişkenin değeri değil, bulunduğu adres bilgisi olacaktı. Yani ben “110C” adresini gönderecektim, metin değişkeni, “110C” adresindeki değeri kullanacaktı, bellek içerisinde aynı değer için farklı bir yer ayırmasına gerek kalmazdı.

C#’ta pointer kullanabilmek için öncelikle Visual Studio’da unsafe kodlamaya izin vermemiz
gerekmektedir.

Project -> ProjeAdı.Properties seçeneğine tıklayalım karşımıza şu pencere çıkacaktır:

Şimdi pointer değişken içeren kodumuzu tekrardan oluşturalım.

private unsafe void button1_Click(object sender, EventArgs e)
{
int ilk_sayi = 180251;
int* referans_sayisi = &ilk_sayi;
Console.WriteLine((*referans_sayisi).ToString());
}

ilk_sayi  isimli Integer türünden bir değişken oluşturduk ve 180251 değerini atadık.referans_sayisi isminde Integer türünde bir pointer değişken oluşturduk ve ilk_sayi değişkeninin adresini atadık.adresi 1 artırdık.
referans_sayisi adresinde bulunan değeri ekranda gösterdik:

ve Aynı şekilde sonucumuz 180251 çıkmış oldu.

Pointer değişkenlerinin tanımlanma kuralları:

1. Pointer değişkenler * ile tanımlanır : int* deger
2. & : Pointer olmayan bir değişkenin adres bilgisini verir: &sayi
3. Pointer değişkendeki adres bilgisini alabilmek için değişken adını kullanmalıyız: deger = &sayi

Böylece bir yazımızın daha sonuna gelmiş bulunmaktayız bir sonraki yazımızda görüşmek dileğiyle esen kalın..!!!

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi
İhtiyacınız var mehmet.deveci@gridgroup.com.tr adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

Exit mobile version