little_skunk
Semiprofi
- Mitglied seit
- 17.08.2006
- Beiträge
- 3.773
Es gibt in der Softwareentwicklung mehr zu beachten als nur die Fehlermeldungen von der Entwicklungsumgebung. Eine Endlosschleife wird nicht formal richtig nur weil die Entwicklungsumgebung den Fehler nicht erkennt.
Was ist daran interessant? Das hatten wir bereits geklärt. Ich fasse nochmal kurz zusammen.
1.) Bei 32Bit gibt es Standardmäßig 4GB Speicher. 2GB sind für den Kernel vorgesehen. Die restlichen 2GB können frei belegt werden. Man kann die Aufteilung der 4GB auch verändern. Zum Beispiel 1GB für den Kernel. Dann bleiben 3GB zur freien Verfügung. Was der Kernel macht wenn sein GB voll ist, kann sich denke ich jeder ausmahlen. Wer mehr Speicher möchte, kann natürlich auch mit 64Bit arbeiten. Alles nur eine Frage der Compiler Konfiguration.
2.) Die Funktion New reagiert je nach Compilerversion unterschiedlich auf vollen Speicher. Entweder Null Referenzen oder eine Exception. Darauf muss man entsprechend reagieren und das Programm geordnet Beenden. Im Beispiel ist das nicht der Fall und genau da liegt der Fehler. Was danach passiert sind nur noch Folgefehler, die sich der Programmierer auf seine Rechnung schreiben kann.
Nein ist er nicht. Mein Einwurf bezog sich auf die Idee den Speicher mit Rekursion voll machen zu wollen. Die Idee kam auf, weil bei Rekursion die Pointer auf die Speicheradressen erhalten bleiben und nicht so wie beim Beispiel verlohren gehen. Nun hat Rekursion aber die dumme Angewohnheit, dass im Stack die Rücksprungadresse gespeichert werden muss. Damit bekommt man eher den Stack als den Speicher voll. Außerdem ändert der fehlende Pointer auf den belegten Speicher nichts am Verhalten der Funktion New.
Interessant finde ich halt eher einfach die 2GB Grenze, die unter Windows zu einem Absturz führt.
Was ist daran interessant? Das hatten wir bereits geklärt. Ich fasse nochmal kurz zusammen.
1.) Bei 32Bit gibt es Standardmäßig 4GB Speicher. 2GB sind für den Kernel vorgesehen. Die restlichen 2GB können frei belegt werden. Man kann die Aufteilung der 4GB auch verändern. Zum Beispiel 1GB für den Kernel. Dann bleiben 3GB zur freien Verfügung. Was der Kernel macht wenn sein GB voll ist, kann sich denke ich jeder ausmahlen. Wer mehr Speicher möchte, kann natürlich auch mit 64Bit arbeiten. Alles nur eine Frage der Compiler Konfiguration.
2.) Die Funktion New reagiert je nach Compilerversion unterschiedlich auf vollen Speicher. Entweder Null Referenzen oder eine Exception. Darauf muss man entsprechend reagieren und das Programm geordnet Beenden. Im Beispiel ist das nicht der Fall und genau da liegt der Fehler. Was danach passiert sind nur noch Folgefehler, die sich der Programmierer auf seine Rechnung schreiben kann.
Ist der Einwurf von little_Skunk hierbei vielleicht des Rätsels Lösung?
Nein ist er nicht. Mein Einwurf bezog sich auf die Idee den Speicher mit Rekursion voll machen zu wollen. Die Idee kam auf, weil bei Rekursion die Pointer auf die Speicheradressen erhalten bleiben und nicht so wie beim Beispiel verlohren gehen. Nun hat Rekursion aber die dumme Angewohnheit, dass im Stack die Rücksprungadresse gespeichert werden muss. Damit bekommt man eher den Stack als den Speicher voll. Außerdem ändert der fehlende Pointer auf den belegten Speicher nichts am Verhalten der Funktion New.