Zekeriya ile FB'de biraz konuştuk, güzel ve faydalı oldu...
Sanırım, sınıfı geliştirmek için malloc() tarafında işaretçi değil de bir dilim gönderilmeli. Yoksa işler karışabilir ve zaten hali hazırda D'nin böyle bir yeteneği varken kullanmamak çok ama çok ayıp olur...:)
Aslında konuşmamız Buddy Memory Allocation (http://en.wikipedia.org/wiki/Buddy_memory_allocation) çerçevesinde yaptık ama bizim daha akıllı algoritmalar geliştirebileceğimizi düşünüyorum. Tabii bellek birimlerinin bu kadar ucuz ve hızlı olduğu bir devirde bütün bunlarla uğraşmak ne kadar faydalı olur onu bilemiyorum. Yine de güzel bir deneysel çalışma olacaktır. En azından devingen dizilerin genişleme tavırları, capacity kavramını ve/veya tüm verinin taşınmasını daha iyi anlamış olacağız...
Hatta bir SmartDynamicArray sınıfına doğru gittiğimizi görmekteyim! Bu konuda bir kaç not aldım:
1. davranış: 'freeLocated''dan sonra boş yer var mı? Varsa hemen ver, yoksa...
2. davranış: 'memory.capacity''de istenen alandan büyük mü? Büyükse genişlet ve ver, yoksa...
3. davranış: realloc() yapılmış tekrar kullanılabilir alan var mı? Varsa hemen ver, yoksa yapacak bir şey kalmamıştır, tüm dizideki verilerin taşınma ihtimaline rağmen diziyi genişlet.
(İŞTE OLAY BUNDAN SONRA KOPUYOR...)
4. davranış: Tahsis edilebilir kullanılmayan alanlardan işime yarayan en küçüğün bana ver? Veremiyorsan...
5. davranış: Tekrar kullanılabilir en büyük ve komşu (<-- bu çok önemli) ikisini topla ve istediğim boyuta ulaşıyorsa ikisi arasındaki kalan boşluktan itibaren diğerini taşı (align)...
İşte bu son aşama öyle akıllıca tasarlanmak zorunda ki en büyük boş alanlardan başlayacak, üstelik bunlar komşu olacak ve hatta arasında kalan veri de en küçük olacak. İşte bunu bulmak hiç kolay değil ve başarısız olduğunda bir sonraki adayları değerlendirmeli. Zaten bulamazsa 3. davranışın ikinci bölümüne geri dönmeli...
Hepsinden önemlisi, bu yapılan işlemlerin (3. davranışta gerçekleşmesi muhtemel) tüm dizinin belleğin başka bölümüne taşınma ihtimalinden daha yavaş olması durumunda boş bellek bölgelerini değerlendirmeyi kesmeli ve daha çok vakit kaybetmeden kaçınılmaz sona doğru diziyi genişletmeli...:)
Sevgiler, saygılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]