Autor Beitrag
horsti
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 21.02.06 17:44 
Hi, ich habe einen algorithmus mittels rekusion implementiert.
der löst das problem in verschiedenen feldern. wenn die felder allerdings zu groß sind, dann gibts n stack overflow. Also mehr als 20-30 durchgänge sind nicht möglich.
das ist natürlich doof.

wie kann ich den speicherverbrauch minimieren?

ich hab an referenzparameter und wenig lokale variablen in der rekusion-funktions gedacht.
was meint ihr?
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 21.02.06 17:51 
Hallo,

Referenzparameter (const oder var) kann sehr viel bringen, aber Du schilderst Dein Problem ein bisschen sehr allgemein.
Es ist doch die Frage, ob Du nicht wirklich eine Kopie brauchst oder nicht.

Gruss Horst
horsti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 21.02.06 17:55 
In den meisten Fällen brauch ich keine Kopie, deshalb könnte ich da wohl was einsparen.
Ich habe nur aus bequemlichkeit einen Werteparameter genutzt.
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 21.02.06 18:01 
wie wärs denn, wenn du uns mal deinen Quelltext zeigst, sonst wird das hier nicht viel bringen. Frage ist in etwa wie "Ich habe ein Auto, wie kann ich Benzin spaaren?", da kriegst du nicht mehr als die allgemein gültigen Tipps, die du auch überall nachschlagen kannst...
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 21.02.06 18:01 
Hallo,

Glaskugel?
Was ist denn daran bequemer??

Gruss Horst
horsti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 21.02.06 21:04 
Ich möchte den Quelltext nicht posten, weil es eine Schulaufgabe ist und jeder seinen Teil alleine machen soll.

Es ist doch auch egal wie man Text aussieht, Speicher verbraucht wird doch nur an den beiden Stellen (var deklaration, Parameterübergabe), oder nicht?


Horst_H:
Bequemer ist es, weil ich mir keine Gedanken drüber machen muss, ob ich die Variablen verändern darf oder ob das irgendwelche Auswirkungen auf nachfolgende Funktionen hat, oder nicht. Ich kann sie einfach verändern, weil es ja für die Funktion/Prozedur eine extra angelegte Kopie ist. Somit ist es einfacher.
Zudem ist ein Programm mit Referenzparameter schlechter zu verifizieren.
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 21.02.06 21:18 
Hallo,

dann ist das Thema erschoepfend behandelt.

Gruss Horst
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 21.02.06 21:33 
user profile iconhorsti hat folgendes geschrieben:
Ich möchte den Quelltext nicht posten, weil es eine Schulaufgabe ist und jeder seinen Teil alleine machen soll.

user profile iconhorsti hat folgendes geschrieben:

Bequemer ist es, weil ich mir keine Gedanken drüber machen muss, ob ich die Variablen verändern darf oder ob das irgendwelche Auswirkungen auf nachfolgende Funktionen hat, oder nicht.

Sehe ich das hier richtig, du bist Lehrer und entwirfst eine Schulaufgabe, bist aber zu faul dir zu überlegen, was das Programm eigentlich macht?!
Dann ist dir echt nicht zu helfen! Und ja, Speicher wird primär an diesen beiden Stellen verbraucht, aber auch die haben wir bisher noch nicht gesehen. Allerdings lässt sich hier auch Speicher einspaaren, z.B. indem du statt int64 ein byte verwendest, wenn es ausreicht, das lässt sich aber ohne den Quelltext nicht sagen. Ansonsten nimmst du halt akkumulierende Parameter und var-Parameter, wo möglich, optimal wäre es, wenn du es schaffst, die Prozedur in eine endrekursive und damit iterative Form zu überführen. Du kannst auch die zulässige Stackgröße erhöhen, aber im allgemeinen reicht die aus, wenn sie nicht reicht ist dein Programm falsch! Bist du überhaupt sicher, dass das Programm terminiert? Ansonsten frag doch mal deine Schüler, vieleicht findest du da ja jemanden mit mehr Ahnung von dem Thema, der würde dir sicher helfen (eine Hand wäscht die andere ;-))...
horsti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 21.02.06 22:45 
Ne, das siehst du falsch, ich bin Schüler und versuche die Aufgabe zu lösen.
Der Algorithmus funktioniert bei kleinen Feldern einwandfrei, nur bei großen wird zu viel Speicher verbraucht. Ich werde es versuchen an den beiden Stellen mit den o.g. Methoden einzuschränken.
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 21.02.06 23:06 
user profile iconhorsti hat folgendes geschrieben:
Ne, das siehst du falsch, ich bin Schüler und versuche die Aufgabe zu lösen.

Wow, na dann nehme ich das zurück, finde ich toll, dass du dich wohl genug für das Thema interessierst um die Aufgabe ehrlich zu lösen. Wenn noch Fragen auftauchen melde dich einfach...
horsti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 22.02.06 17:41 
Jo, nun läufts, aber ich hab noch eine Frage.

Ich hab hier auf meinen Zettel stehen: Sie benötigen u.a. folgende Algorithmen (Singeltons, Paralelle Linien, Kreuzende Linien, Blockaden,...)

Also, ich habe noch nie was denen gehört, kann mir mal einer sagen was das sein soll?