64-Bit nutzt meines Wissens nach kein stdcall, sondern fastcall, da werden
also unter Umständen Register statt stack verwendet.
Also ich würde es auch für Longs nicht nutzen wollen
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.
Die Aufrufkonvention hat gar nichts mit dem Betriebssystem oder x86/x64zu tun, nur mit dem Compiler. Und ich denke nicht das PB unter x64 auf einmal ne andere Konvention nutzt als unter x86.
Wikipedia hat geschrieben:Die Register- oder FastCall-Aufrufkonvention ist compilerspezifisch
Aber alle statischen Libraries usw. nutzen FastCall!
PB Libs sind nichts anderes als gepackte statische Libraries.
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.
Hab aber unter 64-Bit bisher nichts anders angetroffen!
Unter 32-Bit ist ja alles vertreten.
// edit
http://de.wikipedia.org/wiki/AMD64 hat geschrieben:Gleichzeitig wurde mit AMD64 eine neue Aufrufkonvention für Programmprozeduren (ABI) eingeführt, bei dem Parameter nicht mehr regelmäßig über den Programmstack laufen wie in den klassischen x86-Betriebsmodi, sondern in der Regel in Registern übergeben werden. Dieses registerorientierte ABI ist bei anderen Prozessorfamilien (wie PowerPC) schon länger üblich und kann zu einer Beschleunigung rechenintensiver Programme führen.
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.
MSDN hat geschrieben:Zwei wichtige Änderungen in x64 gegenüber x86 sind die 64-Bit-Adressierbarkeit und ein pauschaler Satz von 16 64-Bit-Registern zur allgemeinen Verwendung. Aufgrund des erweiterten Registersatzes verwendet x64 nur die __fastcall-Aufrufkonvention und ein RISC-basiertes Ausnahmebehandlungsmodell. Das __fastcall-Modell verwendet für die ersten vier Argumente Register und zur Übergabe der anderen Parameter den Stapelrahmen.
Aber es gibt anscheinend auch Ausnahmen.
//Edit:
Ich denke das der Performacegewinn kaum zu spüren sein wird:
Procedure Call(p1, p2)
EndProcedure
t = ElapsedMilliseconds()
For i = 1 To 10000000
Call(0, 0)
Next
t = ElapsedMilliseconds()-t
MessageRequester("", Str(t))
Ich kriegt immer nur 0 angezeigt, ab 100 Millionen krieg ich 96 ms angezeigt, also mehr als 1 Million Aufrufe/ms das ist vernachlässigbar.
Zuletzt geändert von cxAlex am 21.03.2009 17:18, insgesamt 2-mal geändert.
> Du hast Recht:
endlich mal wieder
so kanns Wochenende weiter gehen
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.
ts-soft hat geschrieben:64-Bit nutzt meines Wissens nach kein stdcall, sondern fastcall, da werden also unter Umständen Register statt stack verwendet.
Also ich würde es auch für Longs nicht nutzen wollen
mk-soft hat geschrieben:Mit Zeiger auf die Parameter zu arbeiten ist kein problem.
Also funktioniert die folgende Prozedur allgemein zuverlässig oder nicht?