28. april 2000 - 15:55Der er
4 kommentarer og 1 løsning
Få hukommelsesforbruget af et program/funktion i runtime ...
Hvordan kan jeg få oplysninger om programmets hukommelsesforbrug i runtime. Her tænker jeg på en evt. funktion, der kan kaldes flere gange i programmet som tager det aktuelle hukommelsesforbrug og smider ind i et array, hvor efter vi kan udskrive peaket.
Du skal simpelthen overloade operator new, new[], delete og delete[] med funktioner, der
1) Opdaterer en liste over alle allokerede blokke 2) malloc'er eller free'er den hukommelse, som den originale operator ville have gjort
Fx: (antal, at insert indsætter en adresse (som key) og en størrelse (som value) i en eller anden form for tabel (et stl map kan anbefales) og at remove fjerner den indgang, som har den givne adresse som key og returnerer value'n
long max_use=0,use=0; void *operator new(size_t _mem) { void *ptr=malloc(_mem); insert(ptr,_mem); use+=_mem; if (use>max_use) max_use=use; return ptr; }
Bemærk dog, at der er een fare ved dette: Da den tabel, du skal benytte til at lave denne statistik, også allokeres vha new og new[], så vil dine overloadede rutiner (som tilgår tabellen) blive kaldt, mens tabellen bliver lavet - dette er ikke godt! Men det kan forhindres ved at have en statisk variabel, som man sætter lig 0 i deklarationen og som man sætter lig 1 som det første i main(). Så skal man bare udvide de overloadede operatorer til at nøjes med at allokere/deallokere, hvis variablen er 0 og kun tilgå tabellen, når variablen er 1.
Det lyder måske lidt indviklet, men det er faktisk ret nemt at lave. Hvis du kan vente til mandag, kan jeg sagtens sende dig et kodeeksempel fra mit arbejde (jeg har nemlig haft samme behov på et tidspunkt)
Tak for dit svar ... jeg har forsøgt at køre det, og det fungerer helt fint, men det er ikke kun det vi skal bruge, vi skal også ind og se, hvor mange resourcer, som programmet selv bruger på at køre, ud over den hukommelse, der bliver allokeret af programmet.
Undskyld, at jeg svarer så sent, det jeg mener, er ikke hvor meget hukommelse, jeg allokerer til de forskellige objekter og variabler, men hvor meget der også bliver brugt af programmet ... jeg opretter en int, så allokere jeg 4 bytes og hvis jeg har en char ... så ligger jeg bare de to forbrug sammen, men hvis jeg nu vil have at vide, hvor stor et hukommelsesforbrug har mens det kører, udover den hukommelse som bliver allokeret i de forskellige variabler og objekter ... er det totalt sort, det jeg spørger om ... eller giver det bare den mindste smule mening ???
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.