Speicherbereich trimmen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Speicherbereich trimmen

Beitrag 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
(\/) (°,,,°) (\/)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Speicherbereich trimmen

Beitrag 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"
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Speicherbereich trimmen

Beitrag 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
(\/) (°,,,°) (\/)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Speicherbereich trimmen

Beitrag 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.
Antworten