SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++] Zwiększanie się pamięci » 2012-01-06 13:22:46 Witam, przejdę od razu do rzeczy. Na samym początku w Menadżerze zadań aplikacja zżera ~18000 K. Potem tworzę obiekty, które zwiększają te użycie pamięci. Na początku są 2 obiekty, potem 4, 6, 8, 10, 12 ... Problem polega na tym, że gdy już zniszczę taki obiekt, to użycie pamięci zamiast się zmniejszyć to zwiększa się o 80-150 K. Obiekty trzymane są w vector. Myślałem, żeby zwalniać także bitmapę po każdym usunięciu obiektu, ale to nic nie daje. Niby nic, ale kiedy obiektów w pewnym momencie jest np 100 (czyli akurat max)? Czyli (2+4+6+8+10+12+14...+100) * 100 K = 255000 K Co daje ogromny wynik! Doliczając do tego początkowe 18 000 K, oraz dodając każde stworzenie obiektu.. Wyszłoby chyba z 500 000 K. Jeżeli K oznacza KB, to użycie pamięci wynosiłoby 500 MB. Obiekty są niszczone w taki sposób: al_destroy_bitmap( obiekty[ ktory ].img );
obiekty.erase( obiekty.begin() + ktory );
I teraz pytanie, czy to normalne że aplikacja zżera tyle pamięci, czy coś źle robię? |
|
DejaVu |
» 2012-01-06 13:32:56 Coś zrąbałeś ;p |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-01-06 14:16:34 Kurde.. :D To teraz bede myśleć kilka dni co jest nie tak hehe ;p Ale jakby ktoś miał jakiś pomysł, to niech pisze :) |
|
hincu |
» 2012-01-06 14:39:17 sprawdz czy nie rysujesz tych objektow za kazdym obiegiem petli glownej : P |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-01-06 14:41:20 No właśnie je rysuję (w pętli głównej gry), ponieważ przemieszczają się one po ekranie :) |
|
akwes |
» 2012-01-06 14:48:46 Hm... Masz w obiektach destruktor? Może warto właśnie tam wpakować zwalanie bitmapy? No i ładny komunikat na konsole albo do pliku zapisać testament obiektu.
("Ja obiekt o ID: 34, usuwam bitmapę oraz niszczę siebie!"). |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-01-06 15:08:38 Hm.. Jakoś tak.. obiekty się tworzą, ale sie usuwają po chwili i to jeszcze 3 więcej? -.- class CMonster { public: ALLEGRO_BITMAP * img; CMonster() { czyPokazac = rand() % 100; widac = false; } ~CMonster() { cout << "\nObiekt zniszczony. "; } };
vector < CMonster > monster;
void SeeMonster() { if( !wybrany_czas_napasci ) { if( hero.level % 10 == 0 ) ilPotworow = 1; else ilPotworow = hero.level * 2; for( int i = 0; i < ilPotworow; i++ ) { cout << "\nOBIEKT " << i << " zostal stworzony!"; CMonster m; m.x = rand() %( sz_okna - 200 ); m.y = - 300; if( hero.level < 10 ) { m.speed = rand() % 6 + 5; m.speed /= 10; m.hp = 50; m.atak = 0.005; int jaki = rand() % 100; if( jaki <= 50 ) m.img = al_load_bitmap( "media/monsters/Smonster1.bmp" ); else m.img = al_load_bitmap( "media/monsters/Smonster2.bmp" ); m.kasa = rand() % 100 + 25; } monster.push_back( m ); wybrany_czas_napasci = true; } } if( monster[ i ].hp <= 0 ) { int ktory = i; monster.erase( monster.begin() + ktory ); } if( monster.size() == 0 ) { wybrany_czas_napasci = false; hero.level++; } }
OBIEKT 0 zostal stworzony! Obiekt zniszczony. OBIEKT 1 zostal stworzony! Obiekt zniszczony. Obiekt zniszczony. Obiekt zniszczony. Obiekt zniszczony.
|
|
ison |
» 2012-01-06 16:08:41 to normalne, że program będzie Ci zżerał dużo pamięci skoro dla każdego takiego samego przeciwnika ładujesz osobną bitmapę, po co trzymasz w pamięci 100 takich samych bitmap? |
|
« 1 » 2 |