@skate
Skate senin gönderdiğin benim yazıya benzemiş, kullandığımız araçlar bile örtüşüyor. Hatta elemanlar da virtual 64-bit makine kullanalım olsun bitsin demişler sonunda
.. (yalnız neden virtual orasını anlamadım)
Bu arada dediğin gibi, büyükçe bir harita var, sorun genelde o haritada oluyor. Aynen dediğin gibi texture'lar kullanılsın kullanılmasın sürekli bellekte duruyor. "Kullanılmayan-görünmeyen yerleri sil" gibi bir mekanizma ise şuan eklenmeyecek kadar karmaşık duruyor.
Ufak bir detay olarak, "new"'i aykırı durum fırlatmadan kullanmak için "std:nothrow" ile kullanabiliyormuşuz, [Effective C++, 49. madde]
Bu baya işe yaradı, try-catch'e bulaşmadan bellek sorunu olursa assert gönderip, log yazdırabiliyoruz.
Mesela aşağıdaki kod "std::nothrow"'suz haliyle kullanılıyormuş, hiçbir zaman o "if" bloğuna girmiyormuş, çünkü "new"'de aykırı durum(exception) üretip ordan çağrıldığı yere kadar geri dönüydu. O yüzden hatanın ne olduğu bile anlaşılmıyordu, .dmp dosyası da 0 Kb olarak çıkıyordu. şimdi bellek sorunu olursa en azından haberimiz var.
// eski: char* mem = new char[size];
char* mem = new (std::nothrow) char[size];
if(mem == 0)
{
log(...);
assert(...);
}
ID-Tech 5'e gelince, id Software bu mega texture olayına taktı zaten. Yalnız Rage'te texture sorunları var diyorlardı. Yani motorun en önemli özelliği bu mega texture olayı, onun da problemli olması iyi değil tabi. Texture stream-mtream hava cıva demek ki hehe
(şaka tabi, id Soft'a laf yok. Zaten Carmack demoscene'e giricem 64k yapıcam diyordu, belki bu foruma bile gelir
)
@nightlord
Dökümanın tepesinde Andrei Alexandrescu görünce aha dedim sağlam bir şeyler geliyor, muhtemelen bir çok yerini anlamayacam. Neyse çift kolonlu akademik makale perdesi arkadasında sade bir dille yazıldığı için baya anlaşılır çıktı.
(bu çift kolon ve akademik dil belası yüzünden tez 2 sefer direkten döndü, o gun bu gün öyle bir gıcığım ki bu makalelere, görünce yırtasım geliyor