Ali hocam, bu konuda dün akşam FB'de bayağ bir sohbet ettik...:)
Aslında kod tam olarak böyle değil ve Talha ile denediğimiz en son kod şu:
'(biraz sadeleştirdim...)'
import core.memory;
import std.conv, std.stdio;
struct _int{
size_t typ;
size_t value;
this(size_t typ, size_t value){
this.typ = typ;
this.value = value;
}
}
auto RhInt(size_t z){
auto yer = new _int(0, z);
return yer;
}
void main(string[] argv){
size_t i, say = 1000;//000;
_int * önceki;
for(; i < say; i++){
auto yeni = RhInt(i * 2 + 15);
assert(önceki != yeni, to!string(i));
önceki = yeni;
}
auto test = * önceki;
if(test.value) writeln("Değerler yaşıyor olmalı, çünkü...");
i.writeln(" kez çalıştı ve sonuncusunun değeri: ", test.value);
}/* Çıktısı:
Değerler yaşıyor olmalı, çünkü...
1000 kez çalıştı ve sonuncusunun değeri: 2013
*/
Ayrıca Talha en son şunu yazmış:
'(ben de yeni okuyorum...)'
Alıntı:
> ama hocam bu 99 sayısı olmaz tam olarak
diyelim hafızadan silinmemesi gereken 200 tane veri var
yani değişken var o zaman ne olacak?
hocam şimdi öncelikle birkaç şeyi belirtmek isterim
bugün şunu öğrendim
malloc vs herhangi bir şekilde yer açtıktan sonra eğer adres bir şekilde programın bir yerinde bulunursa bu veriye çöp toplayıcılar müdahale etmez o veri hafızadan silinmez haliyle ben orada bu veriyi bir diziye atarsam ben diziden o veriyi silmediğim sürece
hafızzadan silinmeyecek
ben kendim o verinin kullanılıp kullanılmadığını da kontrol edemiyorum
ama bunu d nin kendisi yapabiliyor
Öncelikle 99 sayısı bir misaldi ve bunu dynamic hale (tıpkı dizilerin, belli bir capacity oranınca expand veya sonra üye kaybettiğinde shrink olmasına benzetebiliriz) çevirebiliriz ama önce passive yapmalıyız...
Benim aklıma, FB'de de söze döktüğüm gibi ilk olarak şu algoritma gelmişti ama geliştirilmesi lazım henüz çalışacak olgunluğa erişmiş değil:
class MemoryManagement {
static Liste[] list;
private size_t size, scanIndex;
this(size_t memSize) {
this.list = new Liste[memSize];
}
auto length() @property { return size; }
auto getIndex() @property { return scanIndex; }
bool setIndex(size_t index, bool set) @property {
if(index >= this.size) return false;
list[index].used = set;
return true;
}
void updateIndex() @property {
auto loop = scanIndex == this.size ? 0 : scanIndex;
while(loop < this.size) {
if( list[loop].used == false ) {
scanIndex = loop;
list[loop].used = true;
break;
}
}
}
}
Tabi bu sınıf gerçek bir Memory Management değil sadece basit bir denetleme birimi. Bunu asıl destroy() ile birlikte kullanmamız gerekiyor. Talhacığım, biraz daha sabret Ali hocamın eklemeleriyle iyi bir yere oturtacağız inşaallah...
Kolay gelsin...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]