[SDL] Memory leaks – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

[SDL] Memory leaks – C / C++ – Fórum – Programujte.com[SDL] Memory leaks – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Lorin0
Návštěvník
1. 12. 2012   #1
-
0
-

Ahoj, snažím se naprogramovat jednoduchou hru v C++ za použití knihovny SDL. Momentálně hra umí načíst mapu, přehrávat hudbu a pohybovat s panáčkem.

Vše funguje (alespoň co se po vizuální stránce zdá) dobře. Postavička se pohybuje, hudba se neseká a mapa se načítá jak má. Kdyby ale všechno fungovalo tak perfektně, asi bych nepsal ;).

Jen tak ze zvědavosti jsem si vedle spuštěné hry zapnul i top (program na sledování využití CPU a paměti). Využití CPU se drží na 23%. To mi přijde dost (na to, jak hra vypadá a poměr proti ostatním aplikacím, které nevyužívají ani 2-3%). Někde jsem četl, že vykreslování se samotným SDL je pomalé, takže jsem CPU nevěnoval až takovou váhu. Horší to ale bylo s pamětí. Využití začíná někde na 1-2%, ale postupně roste. Schválně jsem chvíli počkal a po 2 minutách jsem byl na 80%. 

Několik záseků jsem už odstranil (třeba generování SDL_Surface s mapou v každém cyklu, přidal několik SDL_FreeSurface atd..

Valgrind hlásí (převážně) chyby v SDL jako takovém viz. pastebin. Valgrind používám prvně, takže si jeho hlášky možná špatně vykládám.

Kdyby měl někdo zájem nahlédnout do zdrojových kódů: Download Přiloženy jsou i projektové soubory pro Netbeans a všechna potřebná data. Některé parametry jsou napsané natvrdo, jde jen o testovací nastavení.

Je normální, že i takto jednoduchá hra vytěžuje procesor na 20%? Vyřešilo by to spojení s OpenGL? V čem by mohl být schovaný memory leak (alespoň tipy)?

Nahlásit jako SPAM
IP: 89.190.72.–
Reklama
Reklama
Tom
~ Anonymní uživatel
417 příspěvků
1. 12. 2012   #2
-
+2
-
Zajímavé

Jen zkusim hadat ohledne toho vytizeni procesoru....predpokladam, ze vse pocitas a vykreslujes v jednom threadu a ve sve herni smycce nedas procesoru ani instrukci odpocinout. Takze se vytizeni CPU bude vzdy pohybovat kolem maxima (tzn 25% na 4 jadru...ikdyz nevim, jak to presne top zobrazuje, nemam tu top/linux u sebe). Zkus si neco precist o hernich smyckach, jestli ti to vadi....urcite nejsi jediny, kdo tohle resi, takze google je tvuj pritel.

Kod jsem nezkoumal, takze k memory leakum ti moc nereknu, ale koukni jestli nahodou ve smycce pri kazdem pruchodu nahodou neco nealokujes (nejakou novou bitmapu, surface...).

Nahlásit jako SPAM
IP: 88.83.187.–
~ Anonymní uživatel
0 příspěvků
1. 12. 2012   #3
-
+1
-
Zajímavé

$ valgrind --leak-check=full --track-origins=yes ./r_rpg

o errory ktore si poslal sa nemusis start (nie su z tvojho kodu)

Nahlásit jako SPAM
IP: 178.40.39.–
Lorin0
Návštěvník
2. 12. 2012   #4
-
0
-

#2 Tom
predpokladam, ze vse pocitas a vykreslujes v jednom threadu a ve sve herni smycce nedas procesoru ani instrukci odpocinout.

Ano, vše jede v jednom threadu. Zatím jsem na toto téma nic moc nečetl, tak zkusím jen takový nápad. Pomohlo by limitovat FPS třeba na 60 a tím dát procesoru trochu odpočinout?

#3
o errory ktore si poslal sa nemusis start (nie su z tvojho kodu)

A mohu se zeptat, jak je možné že valgrind hlásí chyby v ostatních knihovnách? To je memtest takový pedant, nebo jsou v základních systémových, potažmo grafických/zvukových knihovnách memory leaky?

Nahlásit jako SPAM
IP: 89.190.72.–
Řešení
KIIV+42
God of flame
2. 12. 2012   #5
-
0
-
Vyřešeno Nejlepší odpověď

taky musis pocitat s moznosti ze se sice alokuje pamet v knihovnach - ale uvolnit ji mas ty... takze nekoukej jen na posledni uroven ale i "hloubeji" do stack trace co to hlasi

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lorin0
Návštěvník
2. 12. 2012   #6
-
0
-

Děkuji za rady, opravdu šlo o moji chybu, kdy jsem do okna vykresloval postavičku, ale zapomněl jsem uvolnit paměť. 

L.

Nahlásit jako SPAM
IP: 89.190.72.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 93 hostů

Podobná vlákna

Memory leak — založil CommanderZ

Memory leak — založil Duin

Error 1: Out of Memory — založil Lukfi

Memory exhausted — založil m->29

WxWidgtes - Memory leaeks — založil Blujacker

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý