Frage zu Stringlängen und Datentypen

Für allgemeine Fragen zur Programmierung mit PureBasic.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Frage zu Stringlängen und Datentypen

Beitrag von es_91 »

Hi.

Sind Stringlängen in PureBasic wirklich unlimitiert?

Wie geht man vor, wenn man einen String auslesen will, nach bestimmten Vorkommnissen suchen möchte, und die Position dieser Vorkommnisse speichern will? Benutzt man für die Position Quad-Werte? Was ist, wenn der String tatsächlich mal länger als 2 hoch 64 (18446744073709551616) Zeichen ist? Ein solcher String währe über 16 Exabyte groß, was derzeit nur der NASA und der NSA möglich sein dürfte, ich spekuliere nur.

Aber wie ist die Theorie? Double-Variablen stoßen doch, meines Wissens, auch an ihre Grenzen, bei zu hohen Werte geht die Genauigkeit futsch. Ist die Handhabungsdatengröße von Stringpositionen gewissermaßen "nur" durch den verfügbaren Arbeitsspeicher begrenzt?

Eigentlich kann ich mir die Frage selbst beantworten. Irgendwann brauchen wir mal einen 128-Bit-Datentyp. :praise: :lol:

Und da kommt eigentlich schon die nächste Frage daher: Kann man in PureBasic einen eigenen Datentyp entwickeln? Was gehört da alles dazu? Ich frage nur der Vollständigkeit halber, lese mir gern detailierte oder auf den Punkt gebrachte Antworten durch, aber wahrscheinlich will da sowieso niemand drüber reden. <)

Falls doch... immer her mit den Infos! :wink:
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:53, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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: Frage zu Stringlängen und Datentypen

Beitrag von NicTheQuick »

Wenn genügend Arbeitsspeicher vorhanden ist, könnte man theoretisch Strings erstellen, die größer sind als 2 GB.
Allerdings kommt bei Purebasic bei der Übergabe von 2 · 1024 · 1024 · 1024 Bytes die Fehlermeldung:
[11:32:40] Warte auf den Start des Executable...
[11:32:40] Executable-Typ: Linux - x64 (64bit, Purifier)
[11:32:40] Executable gestartet.
[11:32:40] [ERROR] Zeile: 1
[11:32:40] [ERROR] Die angegebene Länge ist negativ.
Das liegt wohl daran, dass 'Space()' die übergebenen Werte als 32-Bit-Werte interpretiert und nicht als Quad.

1 GB geht allerdings ohne Probleme. Mein Rechner zuckt dann kurz und los geht's. Hier der Code:

Code: Alles auswählen

s.s = Space(1024 * 1024 * 1024)

Debug Len(s)
Sieht dann so aus:
Bild

Allerdings kann man mit 'AllocateMemory()' mehr Speicher allozieren, z.B. 3 GB:

Code: Alles auswählen

*buf = AllocateMemory(3 * 1024 * 1024 * 1024)

Debug *buf
Debug MemorySize(*buf)
Sieht dann so aus:
Bild
Das heißt das geht und du müsstest alle Stringoperationen von Hand machen und kannst nicht auf die PB-internen String-Funktionen zugreifen.

Voraussetzung ist natürlich, dass du ein 64-Bit-System hast. Außerdem glaube ich mal von einer Begrenzung unter Windows gelesen zu haben, die es sogar unter 64-Bit nicht erlaubt Speicherbereiche über 2 GB zu allozieren. Kann das jemand widerlegen? Das wäre nämlich blöd, wenn das stimmt.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Frage zu Stringlängen und Datentypen

Beitrag von _JON_ »

NicTheQuick hat geschrieben:Wenn genügend Arbeitsspeicher vorhanden ist, könnte man theoretisch Strings erstellen, die größer sind als 2 GB.
Voraussetzung ist natürlich, dass du ein 64-Bit-System hast. Außerdem glaube ich mal von einer Begrenzung unter Windows gelesen zu haben, die es sogar unter 64-Bit nicht erlaubt Speicherbereiche über 2 GB zu allozieren. Kann das jemand widerlegen? Das wäre nämlich blöd, wenn das stimmt.
Mein Windows 7 x64 hat dameit kein Problem :mrgreen:
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Frage zu Stringlängen und Datentypen

Beitrag von es_91 »

Nic, danke für die Informationen. Ich sehe schon, ich warte mal lieber ab bis Fred uns 128 Bit gibt. <)

Ich kann bei mir übrigens bis zu 5 * 1024 * 1024 * 1024 Bytes alloziieren. Da geht mir dann aber auch Festplattenspeicher flöten, wegen der Auslagerungsdatei, die bei meinen 4 GB RAM dann beansprucht wird. Komischerweise habe ich für meine pagefile.sys bis zu 4192 MB eingestellt, kann aber nur 5 GB alloziieren. 4 + 4 = 8. Bei mir laufen doch keine 3 GB an Anwendungen! Wo ist der Rest von meinen Speichermöglichkeiten?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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: Frage zu Stringlängen und Datentypen

Beitrag von NicTheQuick »

es_91 hat geschrieben:Nic, danke für die Informationen. Ich sehe schon, ich warte mal lieber ab bis Fred uns 128 Bit gibt. <)
Ich weiß nicht, was du mit 128 Bit genau meinst, denn das hilft dir hier ja auch nicht weiter. Mit SSE kamen ja die ersten nativen 128-Bit-Register. Die kannst du auch mit ASM in Purebasic ansteuern. Mit AVX kamen dann die ersten 256-Bit-Register.
Aber mit 64 Bit kannst du ja schon 16 Exabyte bytegenau adressieren. Also was willst du mehr? Kauf dir halt mehr RAM und einen Server mit entsprechend viel Speicher.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Frage zu Stringlängen und Datentypen

Beitrag von es_91 »

Also was willst du mehr?
Ich frag einfach noch mal nach: Wie groß kann jetzt ein String in PureBasic sein? So groß, wie ich Speicherbereich mit PureBasic alloziieren kann? Dann war meine Frage umsonst.

Aber ich kann übrigens kein ASM und deshalb fragte ich mich, warum es keine nativen 128-Bit Variablen in PureBasic gibt und ob es sie mal geben wird. Ich verstehe nicht soviel von der Technik, hast Du bestimmt schon gemerkt.
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:52, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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: Frage zu Stringlängen und Datentypen

Beitrag von NicTheQuick »

Ich hab doch oben alles schon geschrieben. Strings gehen anscheinend nur bis 1 GB Länge.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Frage zu Stringlängen und Datentypen

Beitrag von es_91 »

Okay. Bei mir sind's ungefähr 466000000 Unicode- oder 932000000 Ascii-Zeichen.
Antworten