Diskussion:Zeichenkette
Aus C64-Wiki
Zur Navigation springenZur Suche springenMmmmh, was ist denn nun besser? Mehrere kleine Zeichenketten miteinander verknüpfen und somit nicht soviel BASIC-Code zu erzeugen oder eher vermeiden wegen der Garbage Collection?? Oder haben beide Verfahren ihre Berechtigung auf den C64 ?! --Jodigi 16:39, 5. Okt. 2009 (CEST)
- Wie meinst du das? --GoDot 18:49, 5. Okt. 2009 (CEST)
- Also wenn man beim C64 nur von den minimalen, beschränkten Speicherplatz für BASIC-Programme ausgeht.
- Ist es besser Zeichenkettenvariablen mit dem Pluszeichen zu neuen Zeichenkettenvariablen zu verknüpfen?
- Oder ist es besser Zeichenketten so anzulegen wie man sie braucht, um die Garbage Collection zu umgehen??
- Oder sollte man beides beachten ?!
- Ich hoffe, es ist nun genauer formuliert... --Jodigi 07:02, 6. Okt. 2009 (CEST)
- Das Problem ist, das man die GC nicht prinzipiell verhindern kann. Wenn man Strings zusammensetzen muss - es geht ja üblicherweise nicht anders -, dann geht das eben nur mit dem dem (+)-Operator. Nur im Falle von PRINT kann man das "+" vermeiden, weil man sozusagen nur einen temporären String ersetzt, der dann ohnehin (anonym) auf dem "Garbage" landet. wenn man mit "," oder ";" als Trenner arbeitet, passiert das MW nicht (wenn ich mich recht an den Basic-Interpretercode erinnnere).
- Der durch Variablenzuweisungen entstehende Müll lässt sich einfach nicht vermeiden. Gewisse Dinge sollte aber nicht standig im Programmablauf vorkommen, wie etwa das Aufakkumulieren von Strings nach
A$ = A$ + " "
oder ähnlich. Besser mit Stringkonstanten arbeiten, die zwar im Basic-Code Platz brauchen, aber der Basic-Interpreter verwendet, dafür auch direkt diese Strings aus dem Code-Bereich (macht also keine Kopie im Stringbereich). - D.h. wirklich wesentlich bei der GC ist die Anzahl der Strings. Solange keine großen Stringarrays vorkommen, kann man sich jegliche GC-Optimierungen sparen. Wenn man aber Stringarrays verwendet, dann wird allein schon durch deren Vorhandensein die Situation verschärft, sodass der freie Speicherplatz naturgemäß immer kleiner wird. Wenn das Programm dann auch noch groß wird, bleibt noch weniger für die Strings übrig und es wird der Aufruf der GC tendenziell häufiger erfolgen. Aus diesem Dilemma habe ich bei meinen Softwareprojekten nur gefunden, indem ich die GC durch eine alternative, schnelle Implementierung ersetzt habe, um ein akzeptables Basic-Programm mit vorhersehbarem Verhalten zu bekommen. --JohannKlasek 13:24, 6. Okt. 2009 (CEST)
- Dem hab ich nichts hinzuzufügen! Vor allem die Tatsache, dass "harte" Stringzuweisungen (also im BASIC-Text hinter Anführungszeichen definierte Strings) keinen RAM-Speicher kosten, solange man sie nicht manipuliert, ist wichtig zu wissen. --GoDot 16:03, 6. Okt. 2009 (CEST)
- Vielen Dank für die schnelle und ausführliche Auskunft. --Jodigi 16:54, 6. Okt. 2009 (CEST)