Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Zwiększanie się pamięci

Ostatnio zmodyfikowano 2012-01-06 16:40
Autor Wiadomość
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:
C/C++
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ę?
P-47372
DejaVu
» 2012-01-06 13:32:56
Coś zrąbałeś ;p
P-47374
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 :)
P-47386
hincu
» 2012-01-06 14:39:17
sprawdz czy nie rysujesz tych objektow za kazdym obiegiem petli glownej : P
P-47390
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 :)
P-47391
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!").
P-47392
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? -.-

C/C++
class CMonster
{
public:
    ALLEGRO_BITMAP * img;
   
    CMonster()
    {
        czyPokazac = rand() % 100;
        widac = false;
    }
   
    ~CMonster()
    {
        //if(img)
        //    al_destroy_bitmap(img);
        cout << "\nObiekt zniszczony. ";
    }
};

vector < CMonster > monster;

//...


void SeeMonster()
{
    if( !wybrany_czas_napasci )
    {
        if( hero.level % 10 == 0 )
             ilPotworow = 1; //BOSS :D
        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;
        }
    }
   
   
    //NASTEPNIE USUWANIE OBIEKTOW
   
    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.
P-47394
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?
P-47400
« 1 » 2
  Strona 1 z 2 Następna strona