|
| Hukommelse til rådighed? Hvordan?? Fra : Hans Christiansen |
Dato : 02-10-07 10:54 |
|
Hej,
Jeg har et C-program hvor jeg har brug for løbende at holde øje med hvor
meget hukommelse
der er til rådighed i procent.
Formålet med det er, at bestemme hvornår funktioner, som bruger malloc, kan
kaldes. Desuden
skal oplysningen også vises på et web-interface til softwaren.
Jeg kunne selvfølgelig bare lave check på returværdien for en malloc alle de
steder
der bliver brugt malloc, men det er i dette tilfælde ret omfattende.
Metoden skal virke både når jeg kompilerer på en Linux-maskine og en
Windows-maskine.
Tak på forhånd.
| |
Arne Vajhøj (02-10-2007)
| Kommentar Fra : Arne Vajhøj |
Dato : 02-10-07 15:22 |
|
Hans Christiansen wrote:
> Jeg har et C-program hvor jeg har brug for løbende at holde øje med hvor
> meget hukommelse
> der er til rådighed i procent.
>
> Formålet med det er, at bestemme hvornår funktioner, som bruger malloc, kan
> kaldes. Desuden
> skal oplysningen også vises på et web-interface til softwaren.
>
> Jeg kunne selvfølgelig bare lave check på returværdien for en malloc alle de
> steder
> der bliver brugt malloc, men det er i dette tilfælde ret omfattende.
>
> Metoden skal virke både når jeg kompilerer på en Linux-maskine og en
> Windows-maskine.
1) Du skal nok definere problemet lidt mere præcist.
Ønsker du at finde ud af hvormange procent af dit programs
virtuelle adresserum der er i brug ?
Eller ?
2) Næsten uanset hvad bliver du nok nødt til at #ifdef'e med forskellig
kode for Windows og Linux.
Arne
| |
Hans Christiansen (02-10-2007)
| Kommentar Fra : Hans Christiansen |
Dato : 02-10-07 20:21 |
|
>
> 1) Du skal nok definere problemet lidt mere præcist.
>
> Ønsker du at finde ud af hvormange procent af dit programs
> virtuelle adresserum der er i brug ?
>
> Eller ?
Jeg vil gerne vide hvor mange procent, af den hukommelse der anvendes
ifm. malloc, der er fri
> 2) Næsten uanset hvad bliver du nok nødt til at #ifdef'e med forskellig
> kode for Windows og Linux.
ok
| |
Anders J. Munch (02-10-2007)
| Kommentar Fra : Anders J. Munch |
Dato : 02-10-07 19:40 |
|
Hans Christiansen wrote:
> Hej,
>
> Jeg har et C-program hvor jeg har brug for løbende at holde øje med hvor
> meget hukommelse
> der er til rådighed i procent.
>
> Formålet med det er, at bestemme hvornår funktioner, som bruger malloc, kan
> kaldes. Desuden
> skal oplysningen også vises på et web-interface til softwaren.
>
> Jeg kunne selvfølgelig bare lave check på returværdien for en malloc alle de
> steder
> der bliver brugt malloc, men det er i dette tilfælde ret omfattende.
Du er da nødt til at checke mallocs returværdi for NULL. Alt andet er
uprofessionelt.
For ledig hukommelse vil jeg foreslå du kigger på brk og ulimit på linux, måske
/proc/meminfo omend det nok kræver root, og på MSWin GetPerformanceInfo,
GetProcessMemoryInfo og GlobalMemoryStatusEx.
mvh. Anders
| |
Ukendt (06-10-2007)
| Kommentar Fra : Ukendt |
Dato : 06-10-07 10:01 |
|
>
> Formålet med det er, at bestemme hvornår funktioner, som bruger malloc,
> kan kaldes. Desuden
> skal oplysningen også vises på et web-interface til softwaren.
>
Er situationen den, at hvis ikke alle malloc's går godt, så vil sofwaren på
et tidspunkt skrive ind i en null pointer?
Så er dette noget træls brandslukning, (men der skuppes de fleste af os vel
ud en gang i mellem ?)
Funderer lidt over hvordan man vha fri hukommelse et bestemt øjeblik kan
garantere at de efterfølgende mallocs går godt.
Kan der ikke have været nogen andre tasks forbi og låne lidt hukommelse i
mellemtiden ?
Iøvrigt, en milion chunks af én byte, giver en megabyte fri ram.
Men hvis én af modulerne forventer at kunne allokere en buffer på 2 bytes ,
så kan det fejle.
Er det et issue ?
tpt
| |
Mogens Hansen (06-10-2007)
| Kommentar Fra : Mogens Hansen |
Dato : 06-10-07 15:54 |
|
"Troels Thomsen" <nej tak ...> wrote in message
news:47074ed5$0$63738$edfadb0f@dread14.news.tele.dk...
[8<8<8<]
> Er situationen den, at hvis ikke alle malloc's går godt, så vil sofwaren
> på et tidspunkt skrive ind i en null pointer?
Nej - man skal checke om malloc gik godt inden man bruger pointeren.
[8<8<8<]
> Funderer lidt over hvordan man vha fri hukommelse et bestemt øjeblik kan
> garantere at de efterfølgende mallocs går godt.
Det tror jeg ikke at man garantere generelt.
[8<8<8<]
> Iøvrigt, en milion chunks af én byte, giver en megabyte fri ram.
> Men hvis én af modulerne forventer at kunne allokere en buffer på 2 bytes
> , så kan det fejle.
> Er det et issue ?
Ja, bestemt.
Det er fragmentering af hukommelsen.
--
Venlig hilsen
Mogens Hansen
| |
|
|