2013-08-08 15 views
5

Ich sah an mehreren Stellen, dass Microsoft Aufrufkonventionen für x64 Plattformen auf nur einen eingegrenzt wurden: Caller cleans stack (cdecl), und Parameter werden in einer Kombination aus Stack und Registern übergeben (ich gehe nicht in die genauen Details hier). Ich nehme an, dass, wenn dies die Aufrufkonvention des Betriebssystems ist, wahrscheinlich auch alle anderen Compiler, die auf Windows abzielen (z. B. mingw-w64), diesem folgen.Aufrufkonvention auf x64

Stimmt diese Aufrufkonvention auch auf anderen wichtigen Plattformen (x64 Linux usw.)? Oder verwendet Linux immer noch mehrere Aufrufkonventionen oder auch nur eine, aber eine andere? Erlauben GCC oder Clang mehrere Aufrufkonventionen auf x64 Linux?

+6

Diese glücklichen Tage sind kurz vor dem Ende. Microsoft fügt die Aufrufkonvention __vectorcall hinzu. Bis zu sechs '__m128'-Werte wurden durch SSE2-Register geleitet. –

Antwort

8

Ich habe gerade die Antwort gefunden here und here. Im Grunde tut Windows das auf eine andere Art und Weise, jeder andere macht es anders, aber jede Plattform tut es nur auf eine Weise (im Gegensatz zu mehreren Möglichkeiten pro Plattform mit

+1

Nicht einen Finger auf beiden Seiten zeigen, aber Sie würden denken, dass nach all den Schmerzen, die x86 Aufrufkonventionen verursacht haben, die Zustimmung zu einem Standard eine Priorität mit x64 gewesen wäre – Basic