|
|
||||||
|
#1
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
>>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
|
|
|
|
|
> 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
|
|
|
|
|
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
|
|
|
|
|
> 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
|
|
|
|
|
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
|