dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

proga, kura parāda citas progas katra dlla atmiņas lietoju

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 28, 2007 4:36 pm    Post subject: proga, kura parāda citas progas katra dlla atmiņas lietoju

vai ir tāda?
kur?
man šausmīgi vienu vajag, citādāk tie memory līķi man dzīvot neļauj..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 28, 2007 7:09 pm    Post subject:

Tā kā jautājums iepostēts Programmēša sadaļā, tad pieņemu, ka šie dll'i ir tavis rakstīti. Tādā gadījumā risinājums ir vienkāršs - katrā dll'ī atmiņu izdalot pieskaiti izdalīto atmiņas apjomu kautkur, un atbrīvojot atmiņu atņem atbrīvoto apjomu. Tādā veidā tev jebkurā brīdī būs pieejams mainīgais, kurš saturēs izdalītās atmiņas apjomu konkrētajā dll'ī.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 28, 2007 7:14 pm    Post subject:

bubu wrote:
Tā kā jautājums iepostēts Programmēša sadaļā, tad pieņemu, ka šie dll'i ir tavis rakstīti. Tādā gadījumā risinājums ir vienkāršs - katrā dll'ī atmiņu izdalot pieskaiti izdalīto atmiņas apjomu kautkur, un atbrīvojot atmiņu atņem atbrīvoto apjomu. Tādā veidā tev jebkurā brīdī būs pieejams mainīgais, kurš saturēs izdalītās atmiņas apjomu konkrētajā dll'ī.

diezvai man tas iznāks ar DX, un man dati glabājas tā, ka es neesmu pārliecināts, kā tos pareizi izdzēst..

nu piemēram:
mana tekstūru glabātuve
LPDIRECT3DTEXTURE9* Tex2DStorage;

salieku visu tur tā:
Tex2DStorage = new LPDIRECT3DTEXTURE9[newcnt];

pielieku tekstūru tā:
D3DXCreateTextureFromFileEx(d3ddev,fname,-1,-1,-1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,-1,-1,0,0,0,&Tex2DStorage[idx]);

visus datus mēģinu nonest tā:
for (int i = 0;i<=D3DT2D_ThisTexIndex;i++)
{
if (Tex2DStorage[i] != NULL){Tex2DStorage[i]->Release();Tex2DStorage[i] = NULL;}
}
delete [] Tex2DStorage;

bet kautkāpēc man dx rāda, ka neesmu noņēmis nost tās tekstūras no atmiņas! vai es kko nepareizi daru, vai tas kāds GM brīnums?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 28, 2007 7:23 pm    Post subject:

DirectX īsti nemāku, taču neredzu kāds te sakars ar GM. Ja tas "nonešanas" kods tiek izpildīts, tad izskatās, ka pareizi atbrīvo atmiņu. Cik zinu par DX, tad katram objektam, ko tev atgriež DirectX vajag izsaukt Release() metodi (ja vien pats speciāli neizsauc AddRef). Un no C++ viedokļa uz katru new izsaukumu ir jābūt atbilstošam delete izsaukumam (tas pats ar [] variantiem). Ja tas tiek darīts, tad vissam jābūt ok.

Quote:
un man dati glabājas tā, ka es neesmu pārliecināts, kā tos pareizi izdzēst..

Nu tad jau problēma skaidra! Vispirms saproti pats, ko esi tur uzprogrammējis un kā tu tur glabā datus. Un pēc tam jau viss būs skdairs.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 28, 2007 7:39 pm    Post subject:

bubu wrote:
DirectX īsti nemāku, taču neredzu kāds te sakars ar GM. Ja tas "nonešanas" kods tiek izpildīts, tad izskatās, ka pareizi atbrīvo atmiņu. Cik zinu par DX, tad katram objektam, ko tev atgriež DirectX vajag izsaukt Release() metodi (ja vien pats speciāli neizsauc AddRef). Un no C++ viedokļa uz katru new izsaukumu ir jābūt atbilstošam delete izsaukumam (tas pats ar [] variantiem). Ja tas tiek darīts, tad vissam jābūt ok.

Quote:
un man dati glabājas tā, ka es neesmu pārliecināts, kā tos pareizi izdzēst..

Nu tad jau problēma skaidra! Vispirms saproti pats, ko esi tur uzprogrammējis un kā tu tur glabā datus. Un pēc tam jau viss būs skdairs.


hmm, nu es vnk esmu aizmirsis, kādā gadījumā jālieto delete[], un kādā tikai delete! man liekas, ka attiecīgi ja masīvu veido ar "new typename[x]", tad delete[], bet citā gadījumā - vnk delete.. bet nu nez..
btw, ka redzēji kodā, es izsaucu Release(); bet dati paliek! kpc tā?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 28, 2007 9:22 pm    Post subject:

Nu tieši tā - ja atmiņu izdala ar new, tad tā jāatbrīvo ar delete.
Un ja ar new[], tad ar delete[].

Jo pirmā sintakse izdala tikai vienu objektu, taču otrā sintakse izdala masīvu ar objektiem. Ja jau gribi atbrīvot masīvu (kurš izdalīts ar new []), tad jau būtu muļķīgi lietot delete, kurš atbrīvo tikai vienu objektu!

Ko nozīmē "dati paliek"?
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 28, 2007 9:30 pm    Post subject:

bubu wrote:
Ko nozīmē "dati paliek"?

vēl joprojām tā tekstūra palikusi atmiņā!

nu es gan nezinu, kā bet kautkāda daļa tur palika..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 28, 2007 10:00 pm    Post subject:

Tādā gadījumā, ja tu 100% zini, ka tekstūras kautkur paliek karājoties atmiņā, vainīgis ir vienīgi DX Release izsaukums. Vai nu tu to neizsauc, vai arī izsauc nepareizi.
Back to top
View user's profile Send e-mail
coderpp



Joined: 20 Aug 2005
Posts: 167
Location: Rīga, Koknese, Gajiena

PostPosted: Sun Oct 28, 2007 10:41 pm    Post subject:

bubu wrote:
Vai nu tu to neizsauc, vai arī izsauc nepareizi.

Noteikt, ka izsauc pareizi, bet viņš to neizdara visām tekstūrām.

Quote:
Tex2DStorage = new LPDIRECT3DTEXTURE9[newcnt];
Quote:

for (int i = 0;i<=D3DT2D_ThisTexIndex;i++)

Divi mainīgie: newcnt un D3DT2D_ThisTexIndex. Cik saprotu, tad pirmais mainīgais norāda tekstūru skaitu. Bet, kas ir otrs mainīgais?
Minējums - mainīgo vērtības ir dažādas (newcnt >D3DT2D_ThisTexIndex) , līdz ar to tavs cikls neapstrādā visas tekstūras. Nebūtu pratīgāk ciklu taisīt šādu:
Code:

for (int i = 0;i<=newcnt;i++)
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 28, 2007 11:17 pm    Post subject:

nu var jau mēģināt, skatīšos, kā sanāks..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Oct 29, 2007 12:26 am    Post subject:

coderpp wrote:
Noteikt, ka izsauc pareizi, bet viņš to neizdara visām tekstūrām.

To jau arī domāju ar izsaukt nepareizi :)
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Mon Oct 29, 2007 12:25 pm    Post subject:

nu bet tas texindex ir pēdējās ieliktās tekstūras indekss, tāpēc viss jau ir atbrīvots!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
coderpp



Joined: 20 Aug 2005
Posts: 167
Location: Rīga, Koknese, Gajiena

PostPosted: Mon Oct 29, 2007 5:51 pm    Post subject:

Bet priekš kam tev tur vajadzīgi divi mainīgie, ja var iztikt ar vienu? Negribi ielikt to koda daļu par tekstūrām? Gribas redzēt ko īsti tu tur dari.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Mon Oct 29, 2007 8:35 pm    Post subject:

coderpp wrote:
Bet priekš kam tev tur vajadzīgi divi mainīgie, ja var iztikt ar vienu? Negribi ielikt to koda daļu par tekstūrām? Gribas redzēt ko īsti tu tur dari.
ok te būs mans īsais un vienkāršais textūru glabātājs:
Code:
LPDIRECT3DTEXTURE9* Tex2DStorage;
int D3DT2D_ThisTexIndex;
Xp double D3DT2D_StorageResize(double newcnt)
{
   Tex2DStorage = new LPDIRECT3DTEXTURE9[(int)newcnt];
   ZeroMemory(Tex2DStorage,sizeof(Tex2DStorage));
   D3DT2D_ThisTexIndex = -1;
   return 0;
}
Xp double D3DT2D_LoadTexture(char* fname)
{
   D3DT2D_ThisTexIndex += 1;
   D3DXCreateTextureFromFileEx(d3ddev,fname,-1,-1,-1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,-1,-1,0,0,0,&Tex2DStorage[D3DT2D_ThisTexIndex]);
   return D3DT2D_ThisTexIndex;
}
Xp double D3DT2D_UseTexture(double plc, double stg)
{
   d3ddev->SetTexture((DWORD)stg,Tex2DStorage[(int)plc]);
   return 0;
}
Xp double D3DT2D_ReleaseTexture(double plc)
{
   Tex2DStorage[(int)plc]->Release();
   return 0;
}
Xp double D3DT2D_ReleaseAll()
{
   for (int i = 0;i<=D3DT2D_ThisTexIndex;i++)
   {
      if (Tex2DStorage[i] != NULL){Tex2DStorage[i]->Release();Tex2DStorage[i] = NULL;}
   }
   delete [] Tex2DStorage;
   return 0;
}
Xp double D3DT2D_ReplaceTexture(double plc, const char* fname)
{
   Tex2DStorage[(int)plc]->Release();
   D3DXCreateTextureFromFileEx(d3ddev,fname,-1,-1,-1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,-1,-1,0,0,0,&Tex2DStorage[(int)plc]);
   return 0;
}

(piemērots GM'am, tāpēc return type - ja nebūs char*, tad jābūt double, tas pats ar argumentiem!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group