Notwendigkeit von clean-up Funktionen?!
-
Auch wenn die OS den Speicher freigeben, sollte man free benutzen, es ist einfach besser gleich richtigen und gültigen Code zu schrieben. Das ist der grund, warum es so viele Bugs bei den mittelmäßigen projekten gibt, wiel die Programmier einfcah faul sind, ein bisschen mehr Sicherheit reinzubringen (wie free benutzen) nach dem Motto "das macht das OS ja soweiso". Das finde ich einfach schrecklich, nicht jeder benutzt ein modernes OS und wieso nicht gleich free(...) benutzen? Das kostet keine Sekunde extra.
-
groovemaster schrieb:
Die meisten modernen Betriebssysteme machen das so. Das ist aber ein "spezieller Service", auf den du dich nicht verlassen solltest...
Danke dir und allen anderen, dass wußte ich nicht.
Ich hab angenommen, dass es jedes OS macht.Bye
-
Hi!
Als ich das damals programmiert habe, kam eine Vergrößerung des virtuellen Speichers nach einigen Programmstarts in Windows2k. Da wurde rein gar nichts freigegeben, ich habe aber zusehen können bei jedem Start wie mein Speicherverbrauch gewachsen ist, aber nicht mehr kleiner wurde und einige Anwendungen nicht mehr liefen. War nicht sehr schön (musste einiges neuschreiben). Nur mal soviel zu dem Thema was moderne BS betrifft.
Code-Hacker
-
@vir:
komm ja nicht auf dumme gedanken, und mache deinem usernamen alle ehre!mfG
h
-
chille07 schrieb:
@vir:
komm ja nicht auf dumme gedanken, und mache deinem usernamen alle ehre!mfG
h
vir: lat. "Mann"
Btw, du bringst einen auf Ideen *g*.
Interessehalber hab ich mal schnell so ein Programm geschrieben, was
sich Speicher schnappt und diesen nicht freigibt. Die Ergebnisse auf GNU/Linux (Linux 2.6.9) (Debian) sind unterschiedlich.Ich hoffe es ist legal, solchen Code zu posten, immerhin ist jeder in der Lage ihn selber zu schreiben:
#include <stdio.h> #include <stdlib.h> int main() { while (malloc(512) ? 1 : 0) ; puts("ready."); return 0; }
Ich hab das Programm paar mal ausgeführt, und mit `free -m` und `top` beobachtet.
Ergebnisse:
.....................................................................................................................
- Gleich nach Start hatte das Programm alles an freiverfuegbaren Speicher "absorbiert", es lief jedoch noch weiter...mit free konnt ich sehen, dass von 504MB 504/502/503 benutzt wurden. Es wechselste also zwischen 504/503/502 - wie kommt das zu Stande?
- Das System wurde langsam, die Maus hat gestockt...arbeiten konnte man nicht; top hat sich auch nicht mehr alle 3 Sekunden aktualisiert.Dann tratt eines der Folgenden Dinge ein:
- Das Programm wurde gekillt. ("Killed"), kurz davor oder dabei oder danach wurde bei mir auch Mozilla Firefox geschlossen...
- Die Grafische Oberflaeche X hat sich beendet(kA ob es sich beendet hat), ich landete in der Konsole...
- Alles wurde eingefroren, auf eine andere Konsole(Alt + Fx) zu springen war nicht möglich.Als das Programm gekillt wurde oder als X sich beendete oder beendet wurde, war der Speicherzustand normal.
Der ganze allokierte Speicher wurde also ge-free()'t......................................................................................................................
Kann mir jemand erklären wie die Unterschiedlichen Ergebnisse zu stande kamen?
Falls ich mich richtig entsinne, hab ich die Bytes, die malloc() allokieren soll, immer etwas verändert(Was vielleicht die unterschiedlichen Ergebnisse erklärt).
Wenn ich Zeit finde, werde ich es mal unter Windows XP Home testen, natürlich kann das auch einer von hier machen...
-
vir schrieb:
Dann tratt eines der Folgenden Dinge ein:
- Das Programm wurde gekillt. ("Killed"), kurz davor oder dabei oder danach wurde bei mir auch Mozilla Firefox geschlossen...
- Die Grafische Oberflaeche X hat sich beendet(kA ob es sich beendet hat), ich landete in der Konsole...
- Alles wurde eingefroren, auf eine andere Konsole(Alt + Fx) zu springen war nicht möglich.Und da solle noch einer behaupten Linux sei besser als Windows.
*scnr*
-
groovemaster schrieb:
Und da solle noch einer behaupten Linux sei besser als Windows.
*scnr*
ich mchte gerne wissen, wie windows da sich verhält. Bei einem Kumpel hab ich geschafft, ein Programme, die mit prinzahlen arbeitet und sie selber rechnet, dass in wenig als 20 Sekunden die Maschine von alleine neugestartet wwurde. Unter meinem Gentoo lief zwar alles langsam aber neu booten musste meine Maschine nicht. Den Source code hab ich leider nicht mehr, es ist schon ganzes Jahr her und weiß nicht mehr, was ich da gemacht hab.
-
ich hab ein programm geschrieben, welches unter windows primzahlen berechnet, und es hat den computer noch nie zum neustart gezwungen.
(funkt halt "NUR" bis unsigned long int; aber bis das erreicht ist, dauerts auch schon ne weile!)mfG (c)h
PS.: hängt vielleicht mit der windowsversion und dem verfügbaren speicher(virtuell und physisch) zusammen?
-
@vir:
Was, wenn du den Code mal wiederverwenden willst - in einer 24/7-Serrveranwendung?Sauberer Stil unterscheidet den Programmierer vom Kodieräffchen. Und da gehört Ressurcenfreigabe nunmal dazu. Und man sollte sich *immer* angewöhnen, das auch im kleinsten Projekt durchzuziehen. Sonst bleibt man lebenslang schlampig.
-
peterchen schrieb:
Sauberer Stil unterscheidet den Programmierer vom Kodieräffchen. Und da gehört Ressurcenfreigabe nunmal dazu. Und man sollte sich *immer* angewöhnen, das auch im kleinsten Projekt durchzuziehen. Sonst bleibt man lebenslang schlampig.
jaja.. schlampigkeit beim programmieren ist nicht besonders gut.
Bei größeren Projekten kennt man sich mit der Zeit nicht mehr aus,
und es können unerwartete Fehler auftreten.ABER: Wer im Glashaus sitzt, der werfe nicht mit Steinen!
und "Ressurcen"... ober ok: gott sei dank hast du nicht "Räsurrsän" geschrieben. :p(Ressourcen)
mfG (c)h
-
Hey! Ich kann richtig schreiben! Ich nutze nur meine Freiheit, das nicht zu tun
-
chille07 schrieb:
ABER: Wer im Glashaus sitzt, der werfe nicht mit Steinen!
und "Ressurcen"... ober ok: gott sei dank hast du nicht "Räsurrsän" geschrieben. :p(Ressourcen)
Ressurcen statt Ressourcen sieht für mich verdammt nach Tippfehler und nicht nach unwissenheit aus.
Ich werfe dir ja auch nicht dein
"ober ok" vor - weil ich weiß, dass du weißt, dass man "aber" mit "a" und nicht mit "o" schreibt.
-
"ober ok" is doch net folsch!
ich versuche möglichst in "deutscher" sprache zu schreiben, aber gelegentlich schleichen sich teile aus meiner Mundart ein. (Unter Freunden darf man doch in Mundart chatten, und wenn man während dem chatten postet.......
)
mfG (c)h