[LUGOS-PROG] memory usage

Simon Mavsar simon.mavsar at hermes.si
Mon Jan 17 13:55:11 CET 2005


Za vsak (m/c/re)alloc povecas za 1 nek globalni stevec katerega z free-ji
zmanjsas. Ce je na koncu ta stevec != 0 imas nekje memory leak. Kar ti pa
razni lib-I allocirajo je pa itaq njihov problem ce puscajo leak-e za sabo.
(z uporabo le teh seveda to postane tudi tvoj problem sam ne vem do katere
mere lahko vplivas na to...?)

Za uporabo pa ni tak zoprno ... (vsaj meni osebno)
Ce naredis nekaj v smeri :

#define ALLOC(ptr, cast, size)                                         \
do {                                                                       \
    ptr = (cast)XXXalloc((unsigned long)size);                             \
    printf("XXXalloced: %x at %x.\n", (int) size, (int) ptr);              \
    if (ptr == NULL) {                                                     \
        // report error
    } else {                                                               \
        memset( ptr, 0, size );                                            \
        mcount++;                                                          \
    }                                                                      \
} while (0)

#define FREEC(ptr)                                                     \
do {                                                                       \
    free(ptr);                                                            \
    mcountc--;                                                             \
    printf("freed: %x.\n", (int) ptr);                                    \
} while (0)

Lp,
Simon

-----Original Message-----
From: Anze [mailto:anze at volja.net] 
Sent: 17. januar 2005 13:37
To: lugos-prog at lugos.si
Subject: [LUGOS-PROG] memory usage

Zivjo!

V programu bi rad vedel, koliko spomina sem alociral. Gre predvsem za to, da

bi rad, da mi program sporoca, ce sem kje pozabil klicati free() (ce se 
stevilo povecuje, imam nekje memory leak). 

Nasel sem tele opcije:
 - getrusage, ampak izgleda, da v Linuxu ta funkcija ne vraca porabe spomina

(vedno vraca 0). 
 - sysinfo() vraca samo celoten spomin na racunalniku, 
 - brk(0) (to je predlagal nekdo na comp.os.linux.development.system):

The difference in return values of calls to brk(0) gives an indication
of changes in the malloc() heap size, for common conditions [each
allocation less than 128KB, ...] of GNU glibc usage. This does not
count static areas of the main program, shared libraries, or modules
loaded dynamically. It also does not count direct use of mmap().
Other conditions and restrictions apply. But it might work
well enough in many cases.

Problem je samo v tem, da v "man 2 brk" ne pise nicesar, kar bi zgornji 
odstavek potrdilo. 

- namesto malloc / calloc / realloc / free lahko klicem svoje funkcije, ki 
stejejo porabo - vendar pa potem ne bom vedel, ce kje pozabim dealocirati 
spomin, ki ga alocira npr. libCurl ali libExpat, pa se zoprno je za uporabo

- /proc - vendar pa je to tezje dobiti ven (parsati moram datoteko), pa se 
spremeni se lahko kadarkoli. 

- ps in parsanje izhoda - glej prejsnjo tocko. :)

Zanima me, ali sem zgresil kaksno bolj preprosto opcijo? Sigurno nisem prvi,

ki dela nekaj podobnega... ;)

LP!

Anze
_______________________________________________
lugos-prog mailing list
lugos-prog at lugos.si
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-prog


More information about the lugos-prog mailing list