mittels malloc den heap alloziieren bis return NULL
-
und was mache ich jetzt wenn ich erreichen will das er abbricht sobal das ram voll ist?
-
Geht eben nicht, weil du nicht merken kannst, wann der Speicherplatz auf virtuellem (statt wirklichem) RAM alloziert wird. Du kannst aber nachschauen, wieviel Arbeitsspeicher frei ist und entsprechend viel holen, dann ist er auch voll (obwohl dann glaubich auch ein großer Teil auf der Festplatte ausgelagert wird, jedenfalls unter Windows).
-
"task manager" klingt nach windows. das programm sollte eigentlich maximal 2 gb ram allozieren dürfen.
-
Du kannst Dir aber die Speicherinfos über ne WinAPI-Funktion (GlobalMemoryStatusEx) holen. Oder Du läuscht an Deinem PC-Gehäuse, wenns permanent rattert, weißte das Deine HD in Aktion tritt
.
PS:
Das:free(p);bringt auch nit mehr viel *g*.
-
CodeFinder schrieb:
PS:
Das:free(p);bringt auch nit mehr viel *g*.
physikalischer speicher war 4xx Mb frei, die waren ruckzuck weg. die auslagerungsdatei ist über 1.1 gig gewachsen!hm
wie löse ich denn dann die aufgabe?
Dynamische Speicherverwaltung
Testen Sie den Speicherausbau Ihres Rechners.
Schreiben Sie ein Programm, mit dem Sie solange in einer Schleife jeweils 4 Mbyte
Speicher auf dem Heap alloziieren bis das System mit dem Rückgabewert NULL zeigt,
dass der mögliche Speicher aufgebraucht ist.
Speichern Sie die Pointer in einem Array und geben Sie den Speicher anschliessend
wieder geordnet frei. Geben Sie bei jeder Allokation/Deallokation auf der Konsole den
Index der Operation und die Adresse des zugehörigen Pointers aus.
Wieviele Blöcke von 4 MB können Sie alloziieren? Bitte begründen Sie die Grösse.
Gibt es eine prinzipielle Grenze?
Beobachten Sie im Task-Manager die Zunahme/Abnahme der Speichernutzung.
Stimmen die Angaben im Task-Manager mit Ihrer eigenen Abschätzung überein?
Sie sehen unterschiedliche Geschwindigkeiten der Zuweisung von Speicher. Warum?
Stimmt der Übergang mit Ihrer Kenntnis über den Speicherausbau des Systems überein?
-
and push
habe die aufgabe mal angehängt!!
-
Was hast du denn fürn OS?
Bei mir (Windows XP) bricht das Programm "sofort" ab, weil der Speicher voll
ist.btw:
Gut dass, du wenigstens 4MB von den XXXMB wieder frei gibst
-
wanderameise schrieb:
habe die aufgabe mal angehängt!!
Wo ist denn die Frage ? Poste mal was Du schon hast.
-
Oh...
Das delete ist ja noch effektiver, fällt mir gerade auf...
delete 0
-
habe nur diesen teil code
int main(void) { int *p; do { p=(int *)malloc(4000000); } while( p != NULL); printf("heap voll"); free(p); getchar(); }aber er bricht nicht ab nachdem der RAM voll ist sondern schreibt wie es scheint auf der festplatte weiter!meine frage war, wann er denn nun abbricht und wie man herausfindet wieviel er insgesamt schreibt!
-
Ähm... Irgendwie... Hast du unsere Beiträge nicht gelesen?
Ich denke mal, er bricht ab, wenn die Maximal-Größe der Auslagerungsdatei erreicht ist.
Und wieviel er schreibt? Wie denn "schreibt"? Meinst du, wieviel RAM du nun gefordert hast? Mach dir eine Variable vor die do-Schleife und zähl sie in jedem Durchlauf um 4000000 hoch.