Die Pointer auf die Addressen stehen nacheinander aufm Stack, wo der Speicher wirklich ist auf den sie zeigen ist iirc Zufall.Deeem2031 hat geschrieben:Das es mit Longs funktioniert ist kein Zufall, schließlich müssen die nacheinander aufm Stack liegen.
Adressen von Prozedur-Parametern
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Die Longs werden aber nicht als Pointer übergeben, sondern direkt auf den Stack gepusht. Von daher ist der Speicher der Stack und der ist nicht zufällig angeordnet.cxAlex hat geschrieben:Die Pointer auf die Addressen stehen nacheinander aufm Stack, wo der Speicher wirklich ist auf den sie zeigen ist iirc Zufall.Deeem2031 hat geschrieben:Das es mit Longs funktioniert ist kein Zufall, schließlich müssen die nacheinander aufm Stack liegen.
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
- 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
Code: Alles auswählen
Procedure Show (count, v1.s="", v2.s="", v3.s="", v4.s="", v5.s="", v6.s="")
Protected *p, i
Debug "-- Debug"
Debug "*p1 = " + Str(@v1)
Debug "*p2 = " + Str(@v2)
Debug "*p3 = " + Str(@v3)
Debug ""
Debug "-- Tiere"
*p = @v1
For i = 1 To count
Debug PeekS(*p)
*p + 32 ; PB 4.30 unter Windows XP x64
Next
EndProcedure
Show(3, "Katze", "Hund", "Fisch")
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Kommando zurück, ich hab Sch*** verzapft:
http://de.wikipedia.org/wiki/Aufrufkonvention
Stimmt schon, der Abstand ist konstant. Außer bei Strings. Aber das ändert sich vlt. auch bald, SSE 4.2 soll ja native ASM String Operationen beherrschen.
http://de.wikipedia.org/wiki/Aufrufkonvention
Stimmt schon, der Abstand ist konstant. Außer bei Strings. Aber das ändert sich vlt. auch bald, SSE 4.2 soll ja native ASM String Operationen beherrschen.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Sollte (lt. Wikipedia) klappen.Little John hat geschrieben: Aber wenn die Parameter z.B. alle Integer sind sollte es keine Probleme geben, oder?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
- 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
Code: Alles auswählen
Procedure Show (count, v1.s="", v2.s="", v3.s="", v4.s="", v5.s="", v6.s="")
Protected *p, i
Debug "-- Debug"
Debug "*p1 = " + Str(@v1)
Debug "*p2 = " + Str(@v2)
Debug "*p3 = " + Str(@v3)
Debug ""
Debug "-- Tiere"
*p = @v1
For i = 1 To count
Debug PeekS(*p)
*p + 2 * SizeOf(Integer) + 4 * SizeOf(Long) ; PB 4.30 unter Windows XP x64 und x86
Next
EndProcedure
Show(3, "Katze", "Hund", "Fisch")
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
jo lol, sobald die Strings aber länger sind (zB als 20Bytes) kommt murks raus :
Fazit !
Es ist zwar "hintereinander" hat aber iregnd eine unbekannte Bezihung zur Länge
Code: Alles auswählen
Procedure Show (count, v1.s="", v2.s="", v3.s="", v4.s="", v5.s="", v6.s="")
Protected *p, i
Debug "-- Debug"
Debug "*p1 = " + Str(@v1)
Debug "*p2 = " + Str(@v2)
Debug "*p3 = " + Str(@v3)
Debug ""
Debug "-- Tiere"
*p = @v1
For i = 1 To count
Debug PeekS(*p)
*p + 24 ; PB 4.30 unter Windows XP x64
Next
EndProcedure
Show(3, "KatzeKatzeKatzeKatze", "HundHundHundHund", "FischFischFischFisch")
Es ist zwar "hintereinander" hat aber iregnd eine unbekannte Bezihung zur Länge
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
@ts:
Jo, aber nur bis zur nächsten PB Version falls sich was am String-Manager ändert .
Ich frag mich sowieso warum man so was machen will, übergib doch einfach ne Liste oder ein Array:
Jo, aber nur bis zur nächsten PB Version falls sich was am String-Manager ändert .
Ich frag mich sowieso warum man so was machen will, übergib doch einfach ne Liste oder ein Array:
Code: Alles auswählen
Procedure Show(List Tiere.s())
ForEach Tiere()
Debug Tiere()
Next
EndProcedure
NewList MeineTiere.s()
AddElement(MeineTiere()) : MeineTiere() = "Katze"
AddElement(MeineTiere()) : MeineTiere() = "Hund"
AddElement(MeineTiere()) : MeineTiere() = "Fisch"
Show(MeineTiere())
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86