> was passiert da genau im stack und was passiert beim aufruf der
> funktion?
Das hängt davon ab, ob die Funktion inline eingefügt wird oder nicht.
Wenn der Compiler optimiert und die Funktion nur ein einziges mal
aufgerufen wird oder die Funktion explizit "inline" deklariert ist, dann
passiert mit dem Stack gar nichts, weil die Funktion dann i.d.R. in den
aufrufenden Code eingebettet wird. Das wäre aber ein Sonderfall.
Allgemein (Regelfall):
Beim Aufruf eines Unterprogramms/Funktion wird der aktuelle Wert des
Programmzählers auf den Stack gelegt und der Programmzähler mit der
Adresse des ersten Befehls der Funktion geladen. Die Funktion wird
abgearbeitet und am Ende der Funktion (meist ein ret-Befehl, ist aber
Controller-spezifisch, wie der Befehl genau heißt) wird der
Programmzähler mit dem auf dem Stack gesicherten Wert geladen und um
eins erhöht, so dass der dem Funktionsaufruf folgende Befehl ausgeführt
wird.