Garbage Collector
-
Jup, den gibt's in C nicht. Meine Frage ist ganz einfach:
Übernimmt das Betriebssystem für mich das Aufräumen und freischaufeln von nicht mehr benötigtem Speicher, NACH Beendigung meines Programms?Ich sage mal ja... oder ist das systemabhängig? WinXP tuts... Win95 nicht? Linux tuts auch.... aber xy nicht?
Bspcode:
int main()
{
char* muell = (char*) malloc(256 * sizeof(char));
// mag nicht aufräumen... macht ja eh das betriebssystem... oder auch nicht
return 0;
}Dass ihr meine Frage nicht falsch interpretiert. Ich will nicht wissen, ob es gut oder schlecht ist allokierten Speicher nicht freizugeben. Es geht mir hier um die Arbeitsweise der Betriebsysteme... nicht wirklich um die Sprache... mhhh... jetzt verschiebt der Mod die Frage bestimmt nach "rund um die...", stimmts Shade. Auch egal... hauptsache jemand kennt die Lösung?
Vielen Dank schonmal für eure Antworten
-
generell hast du dann datenmüll im speicher hinterlassen und den speicher weiterhin als belegt markiert. die einzigen variablen, die für dich aufgeräumt werden sind solche:
int zahl = 5; char zeichen = 'a'; const char zeichenkette[] = "Hallo das ist eine Zeichenkette"
jeglicher speicher, den du mit malloc holst, musst du selber freigeben
-
Ich kann dazu nur soviel sagen: Linux gibt den Speicher frei.
-
Meiner Meinung nach tut das Windows auch sobald der zugehörige Prozess endet.
-
Danke! Genau das wollte ich wissen und hören
Habt nich nen schönen Tag zusammen!
-
Original erstellt von hackbert:
Meiner Meinung nach tut das Windows auch sobald der zugehörige Prozess endet.Irrtum! Windows NT tut das nicht. workstations, die rund um die Uhr an sind (interessanterweise auch wenn man sich abmeldet) haben auf Dauer echte Probleme damit. Win95 ist afaik auch so.
Aber das tut auch eigentlich nix zur Sache. Der bessere Stil ist, seinen Müll auch wieder wegzuräumen.cYa
DjR
-
So siehst Du, was passiert - WINDOWS:
Taskmanager an, Registerkarte "Systemleistung"
void main(void) { malloc(20000000); getchar(); }
Bei Win2000 wird der Speicher jedenfalls wieder freigegeben.
-
Übernimmt das Betriebssystem für mich das Aufräumen und freischaufeln von nicht mehr benötigtem Speicher, NACH Beendigung meines Programms?
ich würde sagen, dass die meisten Multitasking Prozesse das tun sollten
char* muell = (char*) malloc(256 * sizeof(char));
-sizeof(char) ist immer == 1, also überflüssig
-den Rückgabewert von malloc soll man nicht castenvoid main(void)
void main ist illegal!
-
void main() in C verboten?!?
-
RTFF :p int main() oder void main()?
-
Illegal nicht, dann ginge's nicht, Es verstößt lediglich gegen die ANSI-Norm.
Das Betriebssystem erwartet von jedem Programm, dass es eine Meldung über Erfolg/Misserfolg des Ablaufs zurückliefert.
Benutzt man void main(), so wird standardmäßig 0 genommen. Dies geht zwar, ist aber äußerst unschön.
Axo - W2k räumt auf, das weiß ich, NT (4.0) tut's afaik nicht, oder zumindest nicht sauber.
cYa
DjR
-
Hallo Erde!
Warum werde ich ignoriert?!