Subject: diziler belleğe nasıl yerleştirilir ?
Benim düşüncelerim:
Benim bildiğim kadarıyla diziler belleğe sırasıyla yerleştirilir ve harcadığı alan ise toplam eleman(mı yoksa kapasite mi bilmiyorum ancak statik dizide farketmiyor.) çarpı eleman sayısı. Programda denedim ve statik dizilerde doğru sonuç verdi.
Ancak bunun aynısı dinamik diziler için doğru olamaz. Diziye ne kadar eleman ekleneceği belli olmadığından ne kadar yer ayrılacağıda belli olamaz. Örneğin 4 elemanlı a adlı bir int dizisi belleğe aktarıldığında sırasıyla belleğe yerleştirilsin. Ardından bir int yerleştirilsin. Ardından a dizisine eleman eklendiğinde nereye eklenecek ? Diziler liste olmadığı için bir sonraki elemanın nereye yerleşeceğini takip edemez ? O zaman tek bir çözüm kalıyor. Dizinin yerleştirilen başka boş bir alana yerleştirilecek ve ardından yeni eleman yerleştirilecek. Ancak bunu yazdığım bir programda en sonunda gözlemledim. Ancak anlamadığım bazı şeyler var:
Ayrıca capacity ne olduğunu şöyle düşündüm: capacity ilk adresten sonra kaç bit alanı daha o diziye verileceğini söylüyor. örneğin kapasitesi 4 olan ancak hiç elemanı olmayan bir a dizisi için adres şu şekilde olabilir:
00000000 // 1.eleman
00000004 //2.eleman
00000008 //3.eleman
0000000c //4.eleman başladığı yer.
0000000f//4.elemanın bittiği yer.
00000010 // başka bir elemanın başladığı yer.
Ancak bu adresler alındığı halde bu adreslere erişirken hata veriyor. Çünkü işleri boş ?
Not: dizilerin nereye yerleşeceğini ve hangi sırada yerleşeceğini derleyici mi karar veriyor yoksa işletim sistemi mi ? İşletim sistemi karar veriyorsa eğer sırasıyla yerleştirmezse(sanırım popüler olanlar sırasıyla yerleştiriyor.) nasıl sırayı takip edebiliyor ? (Örne dizi[2] adresinin yerini işletim sistemi nasıl bilebiliyor.) Derleyici ayrıca nasıl yer edinmek istediğini belirtiyor ?
Benim bildiğim kadarıyla diziler belleğe sırasıyla yerleştirilir ve harcadığı alan ise toplam eleman(mı yoksa kapasite mi bilmiyorum ancak statik dizide farketmiyor.) çarpı eleman sayısı. Programda denedim ve statik dizilerde doğru sonuç verdi.
Ancak bunun aynısı dinamik diziler için doğru olamaz. Diziye ne kadar eleman ekleneceği belli olmadığından ne kadar yer ayrılacağıda belli olamaz. Örneğin 4 elemanlı a adlı bir int dizisi belleğe aktarıldığında sırasıyla belleğe yerleştirilsin. Ardından bir int yerleştirilsin. Ardından a dizisine eleman eklendiğinde nereye eklenecek ? Diziler liste olmadığı için bir sonraki elemanın nereye yerleşeceğini takip edemez ? O zaman tek bir çözüm kalıyor. Dizinin yerleştirilen başka boş bir alana yerleştirilecek ve ardından yeni eleman yerleştirilecek. Ancak bunu yazdığım bir programda en sonunda gözlemledim. Ancak anlamadığım bazı şeyler var:
import std.stdio; import std.array; void main() { int[] a; int[] c = new int[5]; int b; writeln("a kapasite: ",a.capacity); // elemanı artsada hep aynı adresten başlıyor // ve b dizisi ile aralarında hep aynı sayıda bayt boşluğu var. // a dizisinin adresi neyi gösteriyor. Neyi depoluyor? writeln("b kapasite: ","yok normal birlik int"); writeln("c kapasite: ",c.capacity); writefln("%d",&a); writefln("%d",&b); writefln("%d",&c); a~=0; writeln("ilk a : ", &a ); foreach(i;0..10){ writeln("---\n",i,"a kapasite: ",a.capacity); writeln("b kapasite: ","yok normal birlik int"); writeln("c kapasite: ",c.capacity); writefln("%d",&a); writefln("%d",&b); writefln("%d",&c); a~=i; } writeln("a[8] : ", &a[8],"\na[0] : ",&a[0]); }
Ayrıca capacity ne olduğunu şöyle düşündüm: capacity ilk adresten sonra kaç bit alanı daha o diziye verileceğini söylüyor. örneğin kapasitesi 4 olan ancak hiç elemanı olmayan bir a dizisi için adres şu şekilde olabilir:
00000000 // 1.eleman
00000004 //2.eleman
00000008 //3.eleman
0000000c //4.eleman başladığı yer.
0000000f//4.elemanın bittiği yer.
00000010 // başka bir elemanın başladığı yer.
Ancak bu adresler alındığı halde bu adreslere erişirken hata veriyor. Çünkü işleri boş ?
Not: dizilerin nereye yerleşeceğini ve hangi sırada yerleşeceğini derleyici mi karar veriyor yoksa işletim sistemi mi ? İşletim sistemi karar veriyorsa eğer sırasıyla yerleştirmezse(sanırım popüler olanlar sırasıyla yerleştiriyor.) nasıl sırayı takip edebiliyor ? (Örne dizi[2] adresinin yerini işletim sistemi nasıl bilebiliyor.) Derleyici ayrıca nasıl yer edinmek istediğini belirtiyor ?
canalpay
Show profile
Link to this post