Boxing Ve Unboxing
-
Konuya derinden girip, yuzeye cikmayi amacliyorum. Anlattigim konunun rahat anlasilmasi acisindan sayfalama ve sanal bellek ozelligini goz ardi edicem.
Boxing islemi, stack bellekteki verinin heap alanina tasinmasidir. unboxing ise bunun tam tersidir.
Stack neresi, heap neresi ? genelde .net uzerinde calisan programcilar, bu ve bunun gibi asagi seviyeli bilgileri bilmezler. Bunu anlatmayi dusunuyorum.
Bir program calistirilmadan once harddiskte ardisil bir takim sektorler isgal eden veridir. Bu veri bir duzen icinde tutulur. Bir baslik kismi, kod kismi, veri kismi ve yigin kismi..(MZ\PE header, CODE, DATA, STACK)
Program calistirildiginda ise ismi artik islemdir(process, task). ve bir butun olarak ram'e yuklenir. [MZ baslik formatinda, baslik kismi atilir.PE 'de ise baslik kismiyla birlikte yuklenir.]
Kod kisminda; program icin yazdigimiz calistirilabilir komutlar bulunur.
Veri kisminda; programimizda kullandigimiz degiskenler tutulur.[global, static yerel, string veriler]
Stack kisminda ise yerel degiskenler, parametre degiskenleri tutulur(olusturulur ve silinir).Stack bolgesinin uzunlugu(buyuklugu) baslik kisminda yazan deger ile belirlenir.
ornegin
void Fonk()
{
int a;
object obj;
a = 5;
obj = (object) a; // boxing
a = (int) obj; //unboxing
}
a degiskeni, stack bolgesinde yaratilmistir. obj nesnesinin, gostericisi stack bolgesinde yaratilmistir. Fakat kendisi [yani icerisinde barindiricagi veri] heap bolgesinde yaratilmistir.Heap bolgesi, isletim sisteminin sagladigi bi bolgedir. Heap bolgesine bir veri yuklemek istersek, verinin adresi ancak calisma zamani belli olur.
Peki hangi sekilde veriye ulasmak daha hizlidir ?
Elbette ki stack kismindaki veriye ulasmak daha hizlidir. Cunku heap bolgesindeki veriye ulasmak icin gosterici kullanilir.;)
aklima gelmisken, koleksiyonlardaki 'generic' konusu bu hiz farki yuzunden dusunulmustur. Yoksa zaten her turden veriyi icinde barindiran object tipte nesneler kullanilabilinir(ki kullanilmistir da). Fakat generic'lerle her tur icin ayri bir veri yapisi derleyici tarafindan hazirlanir. Bu sekilde hiz farki ortadan kalkmis olur.
-
ellerine sağlık , güzel olmuş
ama referans ve value tiplerden de bahsetsen döküman tamamlanacakmış.
-
evet o konudan da bahsetsek guzel olurdu :) Ama cevremdeki bircok insan boxing olayini tur donusturme olayiyla karistiriyo. Bu yuzden bu konuya deginmek istedim.
-
Veriyapılarının temellerinden
güzel yazı olmuş hocam :)