AlexanderKiebler schrieb:
Nein, der Linker linkt nur, der ändert nichts mehr am Code. Außer du machst wilde Sachen wie Optimierung zur Linkzeit, aber dann passt der klassische Ablaufplan von Compilierung, Assemblierung und Linken nicht mehr.
Ja als ich das geschrieben habe ist mir das auch aufgefallen. In dem Fall würde der Linker ein bischen compilieren .... damit wäre die Trennung nicht mehr sauber das stimmt.
Macht ja nix, viele Compiler bieten mittlerweile die Option dass die gesamte Code-Generierung im Linker gemacht wird (MSVC nennt es LTCG, GCC nennt es LTO).
Wenn dadurch eine Funktion inline erweitert wird, kannst du auch davon ausgehen dass viele unnötige Dinge die nacht "as if" entfernt werden können auch entfernt werden.
Wenn auch mit LTCG/LTO ein echter Funktionsaufruf übrigbleibt gehe ich davon aus dass unbenützte Parameter nicht optimiert werden.
Ja du hast Recht, auf den stack müssen ja die Register, welche vom Unterprogramm benutzt werden könnten. Ich hatte irgendwo noch im Kopf, dass auch die Parameterliste auf den stack kommt..... Bin ich da auf dem Holzweg ??
Ich muss nachschauen verdammt...
Das Sichern von Registern, Parameterübergabe etc. ist alles implementierungsabhängig.
Üblich ist dass Register auf den Stack gesichert werden, dann die ersten paar Parameter in Registern übergeben werden, und der Rest auf dem Stack landet.