Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
Arda
Kayıt: Feb 25, 2003 Mesajlar: 226
|
Tarih: Thu Jul 15, 2004 10:30 am Mesaj konusu: Memory management |
|
|
Selamlar,
Merak ediyorum da, burda oyunlarına engine yazanlardan kaçı kendi memory management sistemini oluşturuyor? Hani sürekli grafik motorundan bahsediyoruz da bu konuya el atan oldu mu henüz? Gerek duyan oldu mu yada? |
|
Başa dön |
|
|
UzMaN
Kayıt: Jan 29, 2003 Mesajlar: 118 Nereden: Eskişehir
|
Tarih: Thu Jul 15, 2004 3:57 pm Mesaj konusu: |
|
|
ufak çaplı oyunlarda memmanager a gerek oldugunu sanmıyorum.ama bir motorda tabiki memmanager olmalı.yapılacak memmanager da heap yönetimi,bellek sızıntılarını önleme,reference counting,çöp toplama vs olmalıdır aksi takdirde oyunumuz belleği verimli şekilde kullanmaz, tabi bir de uygulama uzun süre çalıştıktan sonra çakılabilir vs. |
|
Başa dön |
|
|
Ziyaretci
Kayıt: Apr 24, 2003 Mesajlar: 287 Nereden: İstanbul
|
Tarih: Thu Jul 15, 2004 4:12 pm Mesaj konusu: |
|
|
bildiğim kadarıylan, memory allocation direk kernele falan gittiği için yavaş bi işlem. eğer oyun sırasında sürekli böyle bişeyler lazımsa kendin yazman mantıklı olabilir. ama sadece girişte yapıyosan bu işleri, sonra memory ile allocation işim olmaz diyosan yazmak boşuna meşgale oluyor.
Çünkü kendin yazdığında, belirli allocation schema ler yapman lazım, büssürü saçma sapan şeyle uğraşmak gerekiyo. büyük bir chunk alıp bunu parçalayacaksın sonuç olarak. bu yüzden fragmentation falan filan giriyo işin içine.. büssürü ıvır zıvır işi var.
Ama yine de basit bi alloc counter falan faydalı olur. yada direk malloc a falan bi wrapper da yazabilirsin. (ufak utility olarak yani.. )
tabi C++ da autoptr diye bi geyikler var. güzel aletlere benziyolar... onları kullanmak pek çok derdi çözer gibime geliyo..
sonuç:
dikkatli ve düzgün coding yaptıktan sonra temel olarak mem manager a ihtiyaç yok. ama bunu becermek biraz zor. eğer gerçekten ihtiyaç olursa, o zaman mümkün olduğunca light weight bişeyler yapmakta fayda var.. hatta varolan C++ yapılarını kullanmak en temizi.. |
|
Başa dön |
|
|
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
|
Başa dön |
|
|
Notre_Dame
Kayıt: Jun 17, 2003 Mesajlar: 77
|
Tarih: Thu Jul 15, 2004 9:27 pm Mesaj konusu: |
|
|
Çokta gerekli bişey değil ama en azından bellek sızıntılarını felan önlemek için crtdbg.h içinde tanımlı fonksiyonlar kullanılarak sızıntılar önlenebilir.
Çok fazla allocation free gereken yerlerde ben şöyle bir yöntem kullanıyorum. Aslında buna sadece parçacık şeysinde ihtiyaç duydum.
Önce bağlı liste ile max sayıda parçacık için bellek ayırıyorum bunu havuza atıyorum. havuzdaki veriler bağlı liste şeklinde tabi. parçacık allocation etmem gerektiğinde havuzdan 1 tane pointer alıp emittere ekliyorum, emitterdeki parçacık yok edileceği zamanda ordan alıp havuza bırakıyorum felan... |
|
Başa dön |
|
|
lucifer
Kayıt: Nov 02, 2002 Mesajlar: 215 Nereden: Istanbool
|
Tarih: Fri Aug 13, 2004 8:01 pm Mesaj konusu: |
|
|
Memory manager yazmak guzel bir egzersiz. Ama bunun disinda bir ise yaradigini dusunmuyorum. Memory leak'lerle sorunu olanlara da, java kullanmalarini oneririm |
|
Başa dön |
|
|
ayberk_cerit
Kayıt: Aug 13, 2004 Mesajlar: 51 Nereden: Avdan'dan geliyor elinde desdi,kız kurban olduğum sana kim küstü ...
|
Tarih: Sat Aug 14, 2004 7:10 pm Mesaj konusu: |
|
|
Java da sonuç olarak bir hafıza yöneticisi kullanıyor (C tabanlı..) ama bu konuda güzel bir örnek Linux kernel'i.Son sürümünü indirip bir incelemenizi öneriyorum... |
|
Başa dön |
|
|
CHaRMaNDeR
Kayıt: Nov 25, 2003 Mesajlar: 109
|
Tarih: Sun Aug 15, 2004 10:19 am Mesaj konusu: |
|
|
Benim kendi oyunumun içinde AMD'nin 3DNow SDK'sının içinde bulunan bazi hafıza yönetmek için kullanılan fonksiyonlar var. hepsi assembly kullanıyor ve standart fonksiyonlardan çok daha hızlı çalışıyor. Yani türkiyede oyun yapanlarda da kullananlar varmış demekki. |
|
Başa dön |
|
|
lucifer
Kayıt: Nov 02, 2002 Mesajlar: 215 Nereden: Istanbool
|
Tarih: Mon Aug 16, 2004 8:05 am Mesaj konusu: |
|
|
Memory manager bana sadece bir kere lazim olmustu. GL_NV_VERTEX_ARRAY_RANGE diye bir extension vardi hani bir zamanlar, iste o zaman...
Bu extension'da guzel bir procedure vardi : gl_nv_malloc_agp gibi birsey. Ama bu procedure'yi sadece bir kere cagirabiliyordun, yoksa sorun cikiyordu. Sen de oyunda tek bir malloc yapiyordun, sonra bu kocaman AGP memory'i kullanan kendi memory manager'ini yaziyordun mecburen. Hatta nvidia'nin soyle basit bir memory manager'i vardi.
Hala memory manager kullanmaya gerek oldugunu sanmiyorum. Bir frame'de kac kere new yada delete cagiriyorsunuz ki? muhtemelen hic...sadece level load ederken yada oyunda particle falan eklemek icin...100 fps calisan bir oyunun bir karesinde 1 tane NEW kullanicam diye memory manager yazmaya deger mi?
Bence degmez. |
|
Başa dön |
|
|
|