STARGÅTE hat geschrieben:
zumindest alle PB Funktionen arbeiten nach eine manipulation richtig.
Das hat damit zu tun, das PureBasic die Länge des Strings nicht speichert. Er denkt also der
String ist wirklich danach vorbei. PureBasic verwendet eine so gennante StirngBase in der, der
String reinkopiert wird zum bearbeiten. Dies ist nichts anderes als ein riesiger Speicherblock. Da er denkt das der
String danach zu ende ist wird Rest also nicht mal mitkopiert.
STARGÅTE hat geschrieben:
Allerdings weiß ich zu wenig, wie das OS oder PB die String verwaltet.
Somit ist ungewiss, ob die restlichen 9997 Bytes immer noch blockiert sind, oder ob das OS sie als "Frei" einstuft, und später wieder überschreibt.
Also erstmal werden Strings von PureBasic verwaltet, das OS hat nur in soweit was damit zu tun, das es Befehle zum Allocaten von Speicher zur verfügung stellt. Aber du hast recht, wenn man keine Stringbefehle auf diesen
String anwedet, wird der zusätliche Speicher nicht freigegeben. Nach dem anwenden eines
String Befehls würde jedoch der Speicher freigegeben. (PureBasic kopiert den
String in die StringBase, gibt den alten Speicher frei, allocated neuen und kopiert den bearbeiten
String da herein). Dies funktioniert einfach dadurch, das man zum Freigeben des Strings nur die Startadresse wissen muss, aber nicht seine Länge.
Und zum Abschluss denke ich hat 7x7 schon alles gesagt:
7x7 hat geschrieben:Ausserdem: Warum sollte man sich auf solche unsichere Spielereien einlassen? Hinterher sucht man sich wieder einen Wolf nach irgendeinem "Bug" der Kopfzerbrechen bereitet.
mfg,
DarkPlayer