hilpers


  hilpers > comp.lang.* > comp.lang.c

 #1  
21.11.2003, 15:56
Markus Krebl
Hallo !

Muß ein Übungsbeispiel lösen und hab's dabei mit dynamischen
Datenstrukturen zu tun, die andauernd Heap-Speicher allokieren und
wieder freigeben (Binärbaume, verkettete Listen).

Gibt's irgendeine Methode um festzustellen wieviel freier Heap-Speicher
noch verfügbar ist ?

Das ganze findet bei mir unter Windows 98 mit dem GNU C-Compiler statt.

Grüsse, Markus
 #2  
21.11.2003, 16:06
J. Meier
Hi Markus,

"Markus Krebl" <markus.krebl> schrieb im Newsbeitrag
news:861d
> Hallo !
>
> Muß ein Übungsbeispiel lösen und hab's dabei mit dynamischen
> Datenstrukturen zu tun, die andauernd Heap-Speicher allokieren und
> wieder freigeben (Binärbaume, verkettete Listen).

Nicht ganz deine Frage, aber ich habe das mal machen müssen in der UNI und
habe den tc30 dazu verwendet. Da gab es keine Probleme mit.

Jan
 #3  
21.11.2003, 17:18
Stefan Reuther
Markus Krebl <markus.krebl> wrote:
> Muß ein Übungsbeispiel lösen und hab's dabei mit dynamischen
> Datenstrukturen zu tun, die andauernd Heap-Speicher allokieren und
> wieder freigeben (Binärbaume, verkettete Listen).


> Gibt's irgendeine Methode um festzustellen wieviel freier Heap-Speicher
> noch verfügbar ist ?


Nein. Die würde dir auch nichts nutzen, denn selbst unter Win98
gibt es Multitasking. Und bereits in dem Moment, wo die
'getfreememory'-Funktion zurückkehrt, kann eine andere Task
sich diesen Speicher reservieren, so daß der Wert wertlos wäre.

Normalerweise ruft man malloc einfach auf. Kommt NULL zurück,
war nicht genug Speicher da - fertig.


Stefan
 #4  
21.11.2003, 18:45
Benedikt Meurer
>>Gibt's irgendeine Methode um festzustellen wieviel freier Heap-Speicher
>>noch verfügbar ist ?

>
> Nein. Die würde dir auch nichts nutzen, denn selbst unter Win98
> gibt es Multitasking. Und bereits in dem Moment, wo die
> 'getfreememory'-Funktion zurückkehrt, kann eine andere Task
> sich diesen Speicher reservieren, so daß der Wert wertlos wäre.


Ich denke Markus meinte den Heap-Bereich des Prozesses, sprich die die
Pages, die potentiell noch in den Speicherbereich dieses Prozesses
gemapped werden könnten. Es sollte ein Pendant zu getrusage und
getrlimit für Windows geben, das genau diese Aufgabe löst.

> Stefan


Benedikt
 #5  
21.11.2003, 18:50
Benedikt Meurer
> Ich denke Markus meinte den Heap-Bereich des Prozesses, sprich die die
> Pages, die potentiell noch in den Speicherbereich dieses Prozesses
> gemapped werden könnten.


(ausgenommen Stack, also üblicherweise, was noch zwischen Ende aktuellem
Heap und "Ende" Stack passt).

Benedikt
 #6  
22.11.2003, 13:55
Claus Reibenstein
Markus Krebl schrieb:

> Muß ein Übungsbeispiel lösen und hab's dabei mit dynamischen
> Datenstrukturen zu tun, die andauernd Heap-Speicher allokieren und
> wieder freigeben (Binärbaume, verkettete Listen).
>
> Gibt's irgendeine Methode um festzustellen wieviel freier Heap-Speicher
> noch verfügbar ist ?


Nein.

> Das ganze findet bei mir unter Windows 98 mit dem GNU C-Compiler statt.


Eventuell gibt es unter Windows eine entsprechende Funktion. Die
müsstest Du dann mal in news:de.comp.os.ms-windows.programmer oder einer
anderen Windows-Gruppe erfragen.

Gruß. Claus
 #7  
22.11.2003, 16:47
Oliver S.
> Muß ein Übungsbeispiel lösen und hab's dabei mit dynamischen
> Datenstrukturen zu tun, die andauernd Heap-Speicher allokieren
> und wieder freigeben (Binärbaume, verkettete Listen).


Als Hinweis am Rande: wenn Du auf Performance wert legst, dann hole
Dir dazu den Speicher aus speziellen Pools. Pool-Allokatoren kann man
sich schnell selbststricken.

> Gibt's irgendeine Methode um festzustellen wieviel freier
> Heap-Speicher noch verfügbar ist ?


Das ist unter Windows und eigentlich allen heutigen Betriebssystemen
nicht mehr so möglich wie Du das Dir wünschst, allein schon weil eine
Anwendung sich den Speicher mit anderen Anwendungen teilt. Aber viel-
leicht hilft Dir die Win32 Funktion GlobalMemoryStatus aus kernel32.dll
weiter. Folgendes kleines Progämmchen gibt einige Werte zur Speicher-
auslastung aus:

#include <windows.h>
#include <stdio.h>

main()
{
MEMORYSTATUS mstat;

mstat.dwLength = sizeof( MEMORYSTATUS );
GlobalMemoryStatus( &mstat );

printf( "memory utilization : %i%%\n"
"total physical memory : %04.2lf MB\n"
"free physical memory : %04.2lf MB\n"
"total paging file size : %04.2lf MB\n"
"free paging file size : %04.2lf MB\n",
(int)mstat.dwMemoryLoad,
(double)(mstat.dwTotalPhys / 1048576.0),
(double)(mstat.dwAvailPhys / 1048576.0),
(double)(mstat.dwTotalPageFile / 1048576.0),
(double)(mstat.dwAvailPageFile / 1048576.0),
(double)(mstat.dwTotalVirtual / 1048576.0),
(double)(mstat.dwAvailVirtual / 1048576.0) );

return 0;
}
 #8  
24.11.2003, 12:17
Jens Schweikhardt
Markus Krebl <markus.krebl> wrote
in <3FBE43BE.B938861D>:
....
# Gibt's irgendeine Methode um festzustellen wieviel freier Heap-Speicher
# noch verfügbar ist ?

[Bitte nicht plenken--kein Leerzeichen vor Interpunktion]

Vielleicht hilft Dir http://www1.us.ioccc.org/years.html#1996
Siehe schweikh3. Ermittelt per malloc aufs Byte genau, wieviel
Speicher allokierbar ist. Aber Vorsicht--It's cool, man!

Regards,

Jens
Ähnliche Themen
Freien physikalischen Speicher ermitteln

Hallo, wie kann ich den freien physikalischen Speicher ermitteln, damit das Programm einen möglichst großen zusammenhängenden Bereich verwenden kann? Gruß Jens

Freien Speicher auf einer DVD-RW ermitteln

Hallo, gibt es da irgendwo eine fertige Routine unter Dotnet wie ich den freien Speicher auf einer DVD ermittel ? Gruss

Freien Speicher eines Datenträgers ermitteln

Hallo, ich habe folgendes Problem: Ich muß Dateien auf verschiedene Medien kopieren. Nun gibt es das Problem, daß die Dateien manchmal die Kapazität des Mediums...

Gesamten und Freien Speicher ermitteln unter win32

Hi all, ich hab gegoogled ohne Ende. Leider habe ich bisher kein *Kommandozeilentool* gefunden, das mir die Speicherauslastung ausgibt, bzw. mir dabei helfen könnte, diese...


Alle Zeitangaben in WEZ. Es ist jetzt 18:43 Uhr. | Privacy Policy