Value and Reference Types

by Yasin Sirkecili 22. Kasım 2008 20:49

Değer Tipleri ve Referans Tipleri  C# Değer tipi ve referans tipi olmak üzere iki ayrı değişken yönetimi mevcuttur. 

  • Değer tipleri programın çalışma zamanında değerleri ile birlikte belleğin stack bölgesinde türü ve içeriği ile saklanan değişken türüdür. Esnekliği yüksektir.

  • Referans tipleri ise belleğin Heap bölgesinde saklanan ancak bellekteki yerinin stack bölgesinde 4 byte olarak tanımlandığı değişken türüdür. Bu 4byte = 32 bit lik referans boyutu işletim sistemine bağlıdır. Eğer 64 Bit bir işletim sistemi kullanıyorsanız stack bölgesinde heap bölgesindeki herhangi bir değişkeni referans eden pointer değerinin boyutu 8 byte yani 64 bit olacaktır.

  Değer tiplerinin aşağıdaki örnekte olduğu gibi birbirine eşitlenmesi kopyalama yöntemi ile gerçekleştiğinden birbirinden bağımsızdırlar.

int i1 = 5;
int i2 = i1;
Response.Write(i2.ToString()); // 5


dediğimizde stack bölgesindeki i1 değişkeninin içeriği yine stack bölgesinde oluşan ikinci değişkenimiz olan i2 nin içeriğine kopyalanır. Bu durumda i1 değişkeninin değerinin değişmesi i2 değişkenini etkilemez.

 Değer tipleri genellikle sınırları belli olan değişken türlerini içerir. Yani Stack bölgesinde saklanan bir değişkenin bellekte kapladığı alan her daim sabittir. Ancak referans tiplerinde bu durum 32 bitlik bir OS için stack bölgesine 4 byte olarak yansırken tanımlanan değişkenin boyut sınırları bilinmediğinden heap bölgesinde ilgili değişkene ait boyut tahmin edilemez.

 string y = “yasin”;
 
string s = “sirkecili”; 

Şeklinde yapılan bir tanımlamada string değişken türü System.String sınıfından gelen bir referans tipi olduğundan belleğin stack bölgesinde iki farklı değişken için 4byte ,4byte olmak üzere iki farklı alan tanımlanır. Heap bölgesinde ise y değişkeni 10byte s değişkeni ise 18 byte yer kaplar.

 Bunun ölçümünü ; 
string y = "yasin";
string s = "sirkecili";
char[] bar = y.ToCharArray();
char[] bar2 = s.ToCharArray();
Response.Write(Convert.ToString((bar.Length * 16 /8)) + " byte <br>");
Response.Write(Convert.ToString((bar2.Length * 16 / 8)) + " byte"); 

Şeklinde yapabiliriz. Char veri tipi 16 bit yani ve bir byte 8 bittir. Bu denklem yardımıyla istediğimiz string türününün kaç byte olduğunu hesaplayabiliriz.  

  Aşağıdaki tabloda c# dilindeki değişkenlere ait türleri ve hangi türlerin hangi tipe ait olduğuna dair bilgi bulabilirsiniz.

     

Tip

Tür

İsim

Boyut(bit)

Açıklama

Değer Sbyte Signed byte 8 İşaretli byte
Değer Byte Unsigned Byte 8 İşaretsiz byte
Değer Short 16bit Signed Integer 16 İşaretli tam sayı(16bit)
Değer ushort 16bit UnSigned Integer 16 İşaretsiz tam sayı(16bit)
Değer İnt 32 bit signed Integer 32 İşaretli tam sayı 32 bit
Değer uint 32 bit unsigned Integer 32 İşaretsiz tam sayı 32 bit
Değer Long 64 bit signed Integer 64 İşretli 64 bit tam sayı
Değer ulong 64 bit unsigned Integer 64 İşretsiz 64 bit tam sayı
Değer Float 32 bit ondalıklı 32 32 bit İşaretli ondalıklı l sayı (7 haneli)
Değer Double 64 bit ondalıklı 64 64 bitİşaretli ondalıklı sayı (15-16 haneli)
Değer Decimal 128 bit real 128 128 bit İşaretli ondalıklı sayı (virgülden sonra 28 hane duyarlı)
Değer Bool Boolean 8 True yada false
Değer Char Karakter 16 Unicode karakterler
Referans String Karakter kümesi Belirsiz Text içerikli veriler.
Referans Object Tür bağımsız ana nesne Belirsiz Tüm türlerin üretildiği Tür bağımsız değişkendir.
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

C#

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen

Yasin Sirkecili


Yasin Sirkecili
Software Developer
MSN: yasin@sirkecili.com

Month List

Calendar

<<  Aralık 2008  >>
PaSaÇaPeCuCuPa
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar

Son Yorumlar

RecentPosts

Desteklediklerim