Rechnergeschwindigkeit am Programmabsturz schuld?
-
Ich habe ein Programm geschrieben, welches auf einem 1200 MHz-Rechner einwandfrei läuft. Dann habe ich es mal auf einem 400MHz Rechner getestet und dort stürzt es aufgrund eines Speicherfehlers ab.
Woran könnte das liegen? Kann die Geschwindigkeit des Rechners damit was zu tun haben? Oder reicht vielleicht der Arbeitsspeicher nicht aus. Ich habe echt keine Ahnung.
Bei diesem Programm lese ich eine Datei ein mit knapp 50000 Zeichen... sobald ich diese auf dem 400MHz Rechner ausprobiere geht es nicht. Auf dem 1200MHz-Rechner gehts aber damit. Wenn ich diese Datei mit 50000 Zeichen dann auf ca. 40000 Zeichen verkleinere, dann funzt es auf dem 400MHz-Rechner auch. Komisch oder?
-
Nenn uns doch mal die Eckdaten der beiden Rechner. So kann man ja nich viel daraus schliessen. Ach ja, die Stelle, wo du die Zeichen einliest, wäre auch noch ganz hilfreich.
-
Die Eckdaten der beiden Rechner???
Naja, die nehmen sich nicht so viel. Beide laufen mit Windows XP Profressionell, beide haben 256MB Arbeitsspeicher, nur einer halt Pentium II mit 400 MHz und der andere Pentium III mit 1200MHz.
Das mit der Stelle angeben, wo ich die Zeichen einlese ist gar nichts so einfach. Es handelt sich hierbei um ein sehr langes Programm mit etlichen Funktionen, bei der ich eine Inp-Datei (text.inp -> ca. 50000 Zeichen) mit fgets einlese. Dieses Programm funktioniert auch top und wurde auch schon mehrfach getestet. Nur halt auf meinem Rechner mit 400MHz läufte es nicht...
-
Ich würd auf einen Fehler im Programm tippen. 50000 Bytes einzulesen bringt nichtmal einen 386er ins Schwanken.
-
Hört sich sehr nach einem Bufferoverflow an...
@evil
Schau mal, ob du auch immer genügend Speicherplatz reserviert hast.
-
habe jetzt herausbekommen, dass mein zugesicherter Speicher (im Taskmanager sichtbar) den Maximalwert erreicht und dadurch das Programm abstürzt. Wie kann ich denn mehr Speicher zusichern?
-
Evtl. den Stack erhöhen? (Wenn das gemeint ist
)
-
ich würd mal sagen es ist nicht schlau einfach den ganzen speicher vollzuballern... in den seltesten fällen braucht man wirklich fast alles was man da aufeinmal reinlädt... macht zwar ein wenig aufwand aber in deinem fall erscheint es mir fast sinnvoll einige sachen "stückweise" zu erledigen
-
AJ: Glaub ich nicht. Wenn man Rekursion benutzt, weiß man normalerweise, was man tut. Wenn man das nicht weiß, hilft Stack vergrößern auch nicht
evil: Ich tippe auf ein Speicherleck. Irgendwo malloc'st du Speicher und gibst ihn nicht wieder frei. Das ganze so oft, dass der Speicher volläuft und das Programm zum Absturz bringt.