Seite 1 von 1

Speicherbereich trimmen

Verfasst: 10.11.2015 14:29
von KeyKon
Bietet mir das MemorySystem in PureBasic eine Möglichkeit einen Speicherbereich vorn und hinten abzuschneiden ohne die Daten kopieren zu müssen?
Also im kleinen PseudoBeispiel:

Code: Alles auswählen

Speicherinhalt: *mem = "XXXOOOOOOOXX"
*mem = ClipMemory(*mem,3,7)
Neuer Speicherinhalt: "OOOOOOO"
Mir ist bewusst, dass ich mit ReAllocate das Heck "abschneiden" kann, ich weiß aber nicht wie/ob ich die Front abschneiden kann.

Bisher speichere ich mir schlicht immer Offset und Länge zum Speicher, das macht das Handling und den Speicherverbrauch aber natürlich nicht grad besser.
Wenn ich den Speicher bei jedem Abschneiden komplett in einen angepassten Speicherbereich kopiere wird das Programm natürlich etwas langsamer, ist also auch keine tolle Lösung.

LG KeyKon

Re: Speicherbereich trimmen

Verfasst: 10.11.2015 14:42
von NicTheQuick
Das geht leider nicht.
Mein Vorschläge wäre:

Code: Alles auswählen

Speicherinhalt: *mem = "XXXOOOOOOOXX"
*mem = MoveMemory(*mem + 3,*mem,7)
*mem = ReAllocateMemory(*mem, 7)
Neuer Speicherinhalt: "OOOOOOO"

Re: Speicherbereich trimmen

Verfasst: 10.11.2015 14:49
von KeyKon
Ok, danke für die schnelle Antwort!

Ich werde mal deine MoveMemory-Methode auf Geschwindigkeit testen, mich hatte bisher folgender Satz aus der Hilfe abgeschreckt:
Dieser Befehl kann langsamer als CopyMemory() sein...

Ist ein direktes Clipping eigentlich systembedingt garnicht möglich, oder einfach nur nicht in der Memory-Bibliothek bedacht?

LG KeyKon

Re: Speicherbereich trimmen

Verfasst: 10.11.2015 17:27
von NicTheQuick
Ich fürchte, das ist Systembedingt nicht möglich. Ich habe zumindest auf die Schnelle nichts gefunden, wie man das z.B. in C machen könnte.
Du kannst höchstens deinen Speicher in mehrere 1 MB Blöcke unterteilen, die alle einzelne alloziert wurden. Dann hast du zwar keinen Speicher mehr am Stück, aber kannst beliebig vorne, hinten und sogar in der Mitte löschen. So LinkedList-mäßig.