Değişkenler ve Ram Kullanımları(Heap, Stack)


Değişkenler, veri saklamaya yarar. Her veri tipi için özel değişkenler vardır.

Değişkenler nerede saklanır :

Ram üzerinde 2 kısım vardır, Heap ve Stack. Stack kısmında değer tipleri, Heap kısmında referans tipleri saklanır. 

Stack'te saklama işlemi yapılırken verinin saklandığı yer bellidir bu yüzden hızlıdır. Kodlar derlenirken,  ram üzerinde yer açılır ve yazdırılır. Uygulama kapandığında yada değişken işlevsiz hale getirildiğinde bu bilgiler ram'dan otomatik silinir. "Stack Overflow" hatası burdan kaynaklanmaktadır, kodlar derlenirken kaplanan alan dışında bir alanda veri ararsak bu hatayı alırız.

Heap'te saklama işlemi yapılırken Ram üzerinde ne kadar yer tuttuğu bilinmediği için, runtime sırasında yapılır. Array içindeki değer tipleride, Heap'te saklanır. Heap'te garbage collector yoktur, saklanan verinin yazılımcı tarafından silinmesi(null,dispose) beklenir, eğer silme işlemi yapılmazsa "Memory Leak" oluşur. Memory Leak sonucunda da uygulama hata verir ve kendini kapatır. Heapteki verinin yeri, Stack alanında saklanır.

Değişken tanımlarken :

  • Değişken adı ingilizce olmalıdır.
  • Değişken adı daha önce kullanılmış olmamalıdır.
  • Değişken adları rakam ile başlayamaz. ( 1customer >> customer )
  • Kütüphanelerde yada kodlama ile ilgili isimler kullanılamaz. ( if, else, console...)
  • Özel karakter içeremez. (!,*,,...)
  • Boşluk kullanılamaz. (Customer Name >> CustomerName)
  • Her değişkenin ram üzerinde kapladığı bir alan vardır. Ufak bir sayıyı saklamak için, long değişkenini kullanmamak gerekir.

Değişken tanımlama :

  • [Değişken Tipi] [Değişken Adı] = [Değişken Değeri];
  • [Değişken Tipi] [Değişken Adı] = new [Değişken Tipi](); (Bu tanımlama yapılırsa default değeri alır.)

Değişkenler :

  • byte (1 bayt) : 0 ile 255 arası tam sayıları tutar. Default değeri 0'dır.
  • sbyte (1 bayt) : -128 ile 127 arası tam sayıları tutar. Default değeri 0'dır.
  • short (2 bayt) : -32k ile 32k arası tam sayıları tutar. Default değeri 0'dır.
  • ushort (2 bayt) : 0 ile 65k arası tam sayıları tutar. Default değeri 0'dır.
  • int (4 bayt) : -21 milyar ile 21 milyar arası tam sayıları tutar. Default değeri 0'dır.
  • uint (4 bayt) : 0 ile 42 milyar arası tam sayıları tutar. Default değeri 0'dır.
  • long (8 bayt) : Aşırı büyük tam sayıların tutar. Default değeri 0'dır. Poliçe no, fatura no gibi uzun sayılar için kullanılır.
  • ulong (8 bayt) : Aşırı büyük tam sayıların tutar. Default değeri 0'dır.
  • float (4 bayt) : Aşırı büyük küsüratlı sayıların tutar. Default değeri 0.0f'dir. Bilimsel ve hassas işlemler için kullanılır.
  • double (8 bayt) : Aşırı büyük küsüratlı sayıları tutar. Default değeri 0.0d'dir.
  • decimal (16 bayt) : Aşırı büyük küsüratlı sayıları tutar. Default değeri 0.0m'dır. Parasal işlemler için kullanılır.
  • bool (1 bayt) : True/False bilgisi tutar. Default değeri false'tur.
  • char (2 bayt) : Tek karakter bilgisi tutar. Default değeri '\x0000' idir.
  • string (Her karakter 2 bayt) : Metin bilgisi tutar. Default değeri null'dir.
  • datetime (8 bayt) : Tarih bilgisi tutar. Default değer "01/01/0001 00:00:00" idir.
  • object : Saklanmak istenen veri tipi ne ise onu otomatik alır.
  • var : Saklanmak istenen veri tipi ne ise onu otomatik alır.
  • dynamic : Saklanmak istenen veri tipi ne ise onu otomatik alır.
  • enum : Sabit bir grup değeri tutar.
Referanslar : 
1. Görsel : https://faun.pub/c-types-b3cd52ba2c0a 
2. Görsel : https://www.c-sharpcorner.com/article/stack-heap-value-type-and-reference-type-in-c-sharp/

Yorumlar