64 Bit

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

64 Bit

Beitrag von purebas »

Hat jemand schon Erfahrungen mit 64 Bit Programme gemacht? Was muss man generell beachten, wenn ich PureBasic nutze, um 64 Bit Programm zu erzeugen, der Quellcode jedoch auch möglichst als 32 Bit compilierbar sein sollte?
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Re: 64 Bit

Beitrag von Vermilion »

Eigentlich gibt es keinen großen Unterschied. Zumindest nicht spürbar, bei mir. Auf eines solltest du schon achten, damit du 64 Bit überhaupt ausnutzt:

Früher war der Standardtyp für Variablen "long", heute ist es "Integer". Long ist immer 4 Byte groß, Integer nur in 32 Bit Programmen, da er in 64 Bit Programmen 8 Byte groß ist.

Es kommt auf deinen Stil an, ob du auch die Variablen, die den Standardtyp benutzen, immer explizit deklarierst (mit Typensuffix á la "Variable.i") oder du das einfach weg lässt, wie ich. In letztem Fall brauchst du dir keinen Kopf machen. Ansonsten solltest du die Long Variablen auf Integer ändern. Aber selbst ohne das sollte es kompilierbar sein. Wie gesagt, eigentlich gibt es im Normalfall keine wahrnehmbaren Unterschiede und beides ist zueinander kompatibel (vom Quelltext her).
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: 64 Bit

Beitrag von NicTheQuick »

Wichtig ist vor allem, dass Pointer auch in Pointer-Variablen gespeichert werden, also '*pointer', und IDs, die du z.B. durch #PB_ANY bekommst entweder auch als Pointer oder als Integer gespeichert werden. Diese Werte können nämlich 32 Bit überschreiten auf einem 64-Bit-System. Und dafür passen sich die Integer ja an.
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: 64 Bit

Beitrag von ts-soft »

Häufigster Fehler sind auch unangepasste Strukturen! Wenn es also knallt oder schei** spielt, Strukturen überprüfen,
ob die auch für FASTCALL optimiert (geboundet) sind.
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
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: 64 Bit

Beitrag von purebas »

Danke für die Antworten!

@ts-soft: Was meinst Du mit "FASTCALL optimiert (geboundet)"?

Ich bin nur ein mittelmäßiger Programmierer. FASTCALL sagt mir was. Aber was bedeutet in diesem Fall "geboundet"?
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: 64 Bit

Beitrag von ts-soft »

hier: http://www.purebasic.fr/german/viewtopi ... 44#p293544
siehste Du eine Strukture mit "Alignment". Die Member der Structure werden immer auf 64-bit aufgefüllt, was die
Geschwindigkeit erhöht. Der C-Compiler führt im FASTCALL Modus diese Optimierung immer durch, wodurch die
Strukturen dann angepaßt werden müssen.

Verschwendet Platz ist aber schneller. Platz ist eigentlich immer genug da, weshalb sowas wie:
Procedure.b bla() normallerweise keinen Sinn macht, genauso wenig wie das man für true/false
ergebnisse Bytes verwendet. Besser ist immer Integer zu nutzen!
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
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Re: 64 Bit

Beitrag von ullmann »

@ts-soft: Ich sehe in dieser Strukture PB_Alignment1.b[4] und PB_Alignment2.b[4]. Sind das die Platzhalter für die 64-Bit-Ausrichtung?
Warum stehen die nicht beisammen oder zusammengefasst als PB_Alignment.b[8]? Wäre die Zusammenfassung zu PB-Alignment.b[8]
möglich? Wieso C-Compiler? Richtet der PB-Compiler die Strukture ebenfalls automatisch an einer 64-Bit-Adresse aus? Wenn nicht, wer
oder was übernimmt die Ausrichtung? Bei Programmen für PB 64 Bit: Müssen die Strukturen zwingend so geboundet werden oder ist das
optional? Ist FASTCALL unter 64 Bit zwingend oder optional?

Danke im Voraus für ein paar anfängerfreundliche Antworten. :)
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: 64 Bit

Beitrag von ts-soft »

ullmann hat geschrieben:@ts-soft: Ich sehe in dieser Strukture PB_Alignment1.b[4] und PB_Alignment2.b[4]. Sind das die Platzhalter für die 64-Bit-Ausrichtung?
Genau
ullmann hat geschrieben: Warum stehen die nicht beisammen oder zusammengefasst als PB_Alignment.b[8]? Wäre die Zusammenfassung zu PB-Alignment.b[8]
Nein, dann ergeben sich im Speicher ja Kombinationen, die nicht auf einmal in ein 64-Bit Register passen, welches nunmal das schnellste wäre.
ullmann hat geschrieben:Wieso C-Compiler? Richtet der PB-Compiler die Strukture ebenfalls automatisch an einer 64-Bit-Adresse aus? Wenn nicht, wer
oder was übernimmt die Ausrichtung? Bei Programmen für PB 64 Bit: Müssen die Strukturen zwingend so geboundet werden oder ist das
optional? Ist FASTCALL unter 64 Bit zwingend oder optional?

Danke im Voraus für ein paar anfängerfreundliche Antworten. :)
Der PB Compiler optimiert keine Strukturen.
API-Strukturen sind nunmal in C oder C++ geschrieben. FASTCALL ist die zur Zeit einzig
genutzte CallConvention unter x64, jedenfalls weder Windows noch Linux nutzen etwas anderes.
Warum sollte man das durcheinander von stdcall und cdecl auch aufrecht erhalten?

Alle Angaben ohne Gewehr.

Gruß

Thomas
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
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Re: 64 Bit

Beitrag von ullmann »

Yup, vielen Dank für die Erläuterungen.

Gruß Rainer
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: 64 Bit

Beitrag von purebas »

:allright:

Sollte eine Schleifenvariable aus Geschwindigkeitsgründen auch als 64-Bit deklariert werden - auch wenn nur von 1 bis 1 Mio. gezählt wird? Das würde also bedeuten, dass ich alle Schleifenvariablen und überhaupt alle Gezahlvariablen auf Integer setzen sollte, damit die Ausführungsgeschwindigkeit optimiert ist.
Antworten