Aufrufkonventionen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Aufrufkonventionen

Beitrag von monta »

Ich hab mal ne ganz einfache Frage.

Haben die Unterschiedlichen Aufrufkonventionen (bspw. cdecl, oder stdcall) eine bessere oder schlechtere Eignung für bestimmte Anwendungsfälle?

Konkret gesagt, ich möchte einen recht großen string übergeben, kann es damit bei einer Konvention Probleme geben, oder ists egal, weil eh nur Zeiger übergeben werden und der string im Speicher liegt? Ob nun von Links oder von Rechts ;)

Abgesehen davon dürfte Fastcall ja rein gar nicht bringen, weil der string nicht ins Register passt, oder?

(Was bringen eigentlich 5 versch. Konventionen?)
Johannes

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Aufrufkonventionen

Beitrag von theo »

Sind, wie der Name schon sagt, hauptsächlich Konventionen, mit Ausnahme von Register (FastCall) welches die ersten 3 nicht auf den Stack legt, was schneller sein soll.

http://de.wikipedia.org/wiki/Aufrufkonvention" onclick="window.open(this.href);return false;

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Aufrufkonventionen

Beitrag von monta »

Das hatte ich schon gelesen. macht also bei der Übergabe letztlich überhaupt keinen Unterschied was mögliche Datenmengen usw. angeht, seh ich das richtig?
Wichtig ist also nur das Aufrufer und Aufgerufene die selbe Konvention verwenden.
Johannes

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Aufrufkonventionen

Beitrag von theo »

monta hat geschrieben:Das hatte ich schon gelesen. macht also bei der Übergabe letztlich überhaupt keinen Unterschied was mögliche Datenmengen usw. angeht, seh ich das richtig?
Wichtig ist also nur das Aufrufer und Aufgerufene die selbe Konvention verwenden.
Würde ich auch so sehen.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Aufrufkonventionen

Beitrag von monta »

ok, gut :D
Johannes

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Aufrufkonventionen

Beitrag von marcov »

monta hat geschrieben:Das hatte ich schon gelesen. macht also bei der Übergabe letztlich überhaupt keinen Unterschied was mögliche Datenmengen usw. angeht, seh ich das richtig?
Wichtig ist also nur das Aufrufer und Aufgerufene die selbe Konvention verwenden.
Default ist typisch optimal. Und Register ist default aus guter Grunde

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Aufrufkonventionen

Beitrag von monta »

marcov hat geschrieben:Default ist typisch optimal. Und Register ist default aus guter Grunde
Wikipedia hat geschrieben:Die Register- oder FastCall-Aufrufkonvention ist compilerspezifisch.
Kann es da nicht probleme geben, wenn ich 2 verschiedene Compiler habe, wenn ich bspw. die dll/so in einer anderen Sprache nutzen möchte?
Johannes

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Aufrufkonventionen

Beitrag von theo »

monta hat geschrieben: Kann es da nicht probleme geben, wenn ich 2 verschiedene Compiler habe, wenn ich bspw. die dll/so in einer anderen Sprache nutzen möchte?
http://www.wummy.org/downloads/fastcall.pdf" onclick="window.open(this.href);return false;

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Aufrufkonventionen

Beitrag von monta »

sehr aufschlussreich.

Also im Zweifelsfall eher meiden und was anderes nehmen...wenn die Chance einer sprachübergreifenden Nutzung besteht.
Johannes

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Aufrufkonventionen

Beitrag von marcov »

monta hat geschrieben:
marcov hat geschrieben:Default ist typisch optimal. Und Register ist default aus guter Grunde
Wikipedia hat geschrieben:Die Register- oder FastCall-Aufrufkonvention ist compilerspezifisch.
Kann es da nicht probleme geben, wenn ich 2 verschiedene Compiler habe, wenn ich bspw. die dll/so in einer anderen Sprache nutzen möchte?
Wikipedia ist nicht volstaendig, wie immer. Die andere Konventionen sind auch nicht ganz all ubergreifend, weil manche Kompiler da auch kompromisse machen (zb kleine constanten in register passen, oder FPU werte in FPU register usw).

Es gibt eben Probleme mit stdcall glaube ich, fuer Typen die nicht durch COM oder C/C++ definitiert sind.

Antworten