Lokale Variablen in einer Funktion



  • Hallo,

    ich wüßte gerne wie der Compiler mit lokalen Variablen in einer Funktion umgeht? Ich habe ca. 20 Variablen in einer Funktion deklariert und rufe diese Funktion in einer Schleife mehrmals auf. Muss für jeden Funktionsaufruf immer wieder neuer Speicherplatz angefordert werden oder erkennt der Compiler, dass ich die Funktion nicht rekursiv aufrufe und den Variablen feste Adresse zuweist? Die Frage ist mir deshalb so wichtig, da ich mit Mikrocontrollern arbeite und mit Hilfe der Schleife die Funktion lieber von außen aufrufen möchte anstatt die Schleife in die Funktion zu verlegen.

    Danke im voraus!



  • Lokale Variablen sind - wie der Name schon sagt - nur in ihrem Gültigkeitsbereich gültig und vorallem vorhanden. In deinem Fall ist das die Funktion. Beim Eintritt wird Speicher reserviert, beim Austritt freigegeben.



  • Lokale Variablen landen auf dem Stack. Da ein Eintritt in eine Funktion sowieso einen Stackframe einrichten muss - Spezialfälle jetzt mal ausgeschlossen - macht es keinen Unterschied ob der Stackpointer 10 oder 100 Bytes raufgesetzt wird ...
    Das Freigeben passiert dann natürlich auch wieder automatisch beim Verlassen der Funktion, wenn der Stackframe zerstört, also der Stackpointer zurückgesetzt wird.
    Das begrenzende Etwas wird bei Microcontrollern wohl eher die max. Größe des Stacksegments sein, aber 20 Variablen sollten auch da noch draufpassen ...

    grüße



  • Sepp Brannigan schrieb:

    Das begrenzende Etwas wird bei Microcontrollern wohl eher die max. Größe des Stacksegments sein, aber 20 Variablen sollten auch da noch draufpassen ...

    Zumindest solange es sich dabei nicht um etwas größere Arrays handelt (ein int data[1000000] könnte schon alleine Probleme bereiten ;))


Log in to reply