Kurze Frage zu Pointern

Anfängerfragen zum Programmieren mit PureBasic.
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Kurze Frage zu Pointern

Beitrag von SebastianJu2 »

*s = @s$

Gibt es einen Nachteil wenn man, wo möglich, nur @s$ als Pointer benutzt anstatt einer echten Pointervariablen?
Ein Vorteil könnte sein dass, je nach Programmaufbau, eine Variablenzuweisung weniger erfolgt. Könnte zB relevant sein wenn die Zuweisung in einer Schleife erfolgt also sehr oft passieren würde.
Und von der Geschwindigkeit scheinen auch beide Versionen gleich schnell zu sein.

Edit: Die Beispiele wo es um Geschwindigkeit durch Nutzung von Pointern ging bezogen sich alle auf Stringoperationen. Gibt es auch Optimierungsmöglichkeiten durch Pointer bei anderen Datentypen?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kurze Frage zu Pointern

Beitrag von STARGÅTE »

Nein es gibt kein Nachteil ... zumindest nicht, wenn du es wirklich nur als Pointer nutzt

Vorteil ist sogar, das du mit @s$ immer den richtigen Pointer bekommst.
Wenn du einmal
*s = @s$
machst, sich dann aber der Inhalt von s$ ändert, kann sich auch deren Pointer ändern, sein *s hätte aber noch den alten Wert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Kurze Frage zu Pointern

Beitrag von ts-soft »

Viel wichtiger ist doch die Lesbarkeit, mit Variablen als s$ oder *s wirste den Code in spätestens
14 Tagen nicht mehr verstehen.

Schreib Dein Programm normal, sicher und leserlich, optimieren kannste später noch, wenn es hakt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Kurze Frage zu Pointern

Beitrag von SebastianJu2 »

s$ war auch nur ein Beispiel. Normal nehme ich sprechende Variablen.

@Stargate

Dankefunktion funktioniert... :)

Ich habe noch ein Frage zur Geschwindigkeitsoptimierung mit Pointern. Die Beispiele die ich dazu gesehen habe bezogen sich alle auf Strings, was ja auch Sinn macht da an Strings und deren Zeichen ansonsten schwierig ranzukommen ist.
Gibt es für die anderen Datentypen auch Optimierungspotential durch Pointer? Wenn ja wo zB?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kurze Frage zu Pointern

Beitrag von STARGÅTE »

Bei Mehrdimensionalen Arrays ist es u.u. schneller ein Feld in einem Pointer zu speichern und mit diesme dann rechnungen durchzuführen:

Code: Alles auswählen

; Statt:
Raum.i(a,b,c) = Raum.i(a,b,c) + Sqr(Raum.i(a,b,c))
; Lieber:
*Raum.Integer = @Raum(1,2,3)
*Raum\i = *Raum\i + Srq(*Raum\i)
Das spart das mehrlaliere ausrechnen des Feldes ...

Oder bei Maps:

Code: Alles auswählen

; Statt:
Raum.i("LaberLaber") = Raum.i("LaberLaber") + Sqr(Raum.i("LaberLaber"))
; Lieber:
*Raum.Integer = @Raum(("LaberLaber")
*Raum\i = *Raum\i + Srq(*Raum\i)
Auch hier wird das ermitteln des Hashs nur mal mal benötigt satt 3 ...

Beispiele mache nur in wirklich komplexen Rechnungen sinn!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Kurze Frage zu Pointern

Beitrag von SebastianJu2 »

Klingt nachvollziehbar dass das schneller gehen kann...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Kurze Frage zu Pointern

Beitrag von ts-soft »

SebastianJu2 hat geschrieben:Klingt nachvollziehbar dass das schneller gehen kann...
Naja, wenn diese ms wirklich was ausmachen? Kommt immer drauf an, wieviel, wieoft usw.
Ausserdem ist PB eine strukturierte Procedurale Sprache und in diesem Sinne sind
Pointer zu vermeiden.

Konzentriere Dich lieber auf einen logischen und sicheren Programm-Aufbau. Deine Pointer-
versuche werden Dich vom richtigem Programmieren nur abhalten. Es gibt wirklich nicht
sehr viele Situationen, wo eine Optimierung durch Pointer sinnvoll ist, wo man das bei
der Nutzung des Programmes bemerkt und nicht nur der Computer es messen kann.

Wenn Du die ersten 10 funktionierenden Programme im Showcase vorgestellt hast, dann
kannst Du Dir über das Pointern gedanken machen :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Kurze Frage zu Pointern

Beitrag von SebastianJu2 »

Also aktuell geht es mir um eine Aufgabe bei der ein Text aus einem EditorGadget erstmal in eine Liste übertragen werden soll.
Ich habe also in einem Formularfeld oben Text mitsamt Zeilenumbruch und muss als erstes die Daten zeilenweise in Listenfeldern speichern. Und da dachte ich das wäre eine Möglichkeit mich an Pointern zu versuchen. Denn ich vermute wenn man erstmal damit umgehen kann wird es auch nicht viel länger dauern es zu coden als wenn man sich mit PB-Funktionen etwas zusammenbaut.
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Kurze Frage zu Pointern

Beitrag von SebastianJu2 »

Ich habe noch eine Frage zur Definition von Datentypen. Manchmal in den Beispielcodes hier im Forum wird für die Definition nicht das Kürzel zB .c benutzt sondern eine lange Form zB .Character. Ich habe speziell dazu nichts in der Hilfe gefunden aber mir ist aufgefallen dass es einen Unterschied macht.
Ein *Char\c erzeugt die Fehlermeldung "Variable hat eine Structure" wenn *Char als *Char.c definiert wurde. Aber es kommt keine Fehlermeldung mehr wenn stattdessen *Char.Character benutzt wurde.

Wie kommt das?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Kurze Frage zu Pointern

Beitrag von ts-soft »

Beim Text aus EditorGadget in eine Linklist, wirste mit Pointern aber nichts gewinnen.
Das musst Du mir aber mal vorführen :wink:

Aber wenn Du unbedingt meinst, Du müsstest dies tun, soll es mir jetzt auch egal sein,
ich hab jetzt alles gesagt, was es zu sagen gab.

Nachtrag:
Diese Strukturen zu kennen und zu verstehen ist aber Grundvorraussetzung, haste das Tutorial
auf PureArea bereits gelesen?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten