Lokale Var. statisch, wenn Fkt. oft aufgerufen wird?



  • Hallo Gemeinschaft,

    da bin ich wieder. Ja, der Urlaub war schön.. 😃

    Mich beschäftigt gerade eine etwas allgemeinere Frage: Wenn ich eine lokale Variable in einer Funktion habe wird doch die lokale Variable bei jedem Funktionsaufruf neu angelegt und nach Verlassen der Funktion der Speicherplatz wieder freigegeben, richtig?
    Wenn die Funktion "oft" aufgerufen wird, ist es dann zweckmäßig die lokale Variable als statisch anzulegen?
    Und wenn die vorstehende Frage mit "ja" beantwortet wird: Gibt es eine Art Faustregel mit der man bestimmen kann: die Funktion wird "oft" aufgerufen?

    MfG

    PS: Mir fällt gerade auf: VCL ist viell. nicht das richtige Unterforum für diese Frage... Aber wohin am Besten damit? Wenn nötig, bitte verschieben!



  • Kolumbus schrieb:

    Wenn die Funktion "oft" aufgerufen wird, ist es dann zweckmäßig die lokale Variable als statisch anzulegen?

    Dann ist deine Funktion nicht mehr threadsicher (es sei natürlich denn, du legst eine thread-lokale statische Variable an).
    Ob sich das nun lohnt, hängt stark vom Typ ab. Wenn die Konstruktion aufwendig ist, die Funktion aber ein konstruiertes, jedoch nicht statuserhaltendes (!) Objekt für ihre Aufgabe benötigt, ist das durchaus eine Option. Allerdings fällt mir gerade beim besten Willen kein Beispiel ein, wo das sinnvoll sein könnte.



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Gut, also macht das für einfache Typen (int, AnsiString, clock_t etc.) keinen Sinn.
    Allerdings ist mir nicht ganz klar, was in diesem Zusammenhang mit "threadsicher" gemeint ist... Meinst du, dass eine häufig aufgerufene Fkt. sinnvollerweise generell in einem eigenem Thread laufen sollte?
    Wobei sich mir dann wieder die Frage stellt: Wie kann man definieren, eine Funktion wird "häufig" aufgerufen?



  • Kolumbus schrieb:

    Mich beschäftigt gerade eine etwas allgemeinere Frage: Wenn ich eine lokale Variable in einer Funktion habe wird doch die lokale Variable bei jedem Funktionsaufruf neu angelegt und nach Verlassen der Funktion der Speicherplatz wieder freigegeben, richtig?

    Nein, es nur der Stackpointer geändert, aber das passiert immer bei nem Funktionsaufruf

    💡 schrieb:

    Wenn die Funktion "oft" aufgerufen wird, ist es dann zweckmäßig die lokale Variable als statisch anzulegen?
    Und wenn die vorstehende Frage mit "ja" beantwortet wird: Gibt es eine Art Faustregel mit der man bestimmen kann: die Funktion wird "oft" aufgerufen?

    Über sowas nachzudenken ist Optimieren an der falschen Stelle.



  • optpro schrieb:

    💡 schrieb:

    Wenn die Funktion "oft" aufgerufen wird, ist es dann zweckmäßig die lokale Variable als statisch anzulegen?
    Und wenn die vorstehende Frage mit "ja" beantwortet wird: Gibt es eine Art Faustregel mit der man bestimmen kann: die Funktion wird "oft" aufgerufen?

    Über sowas nachzudenken ist Optimieren an der falschen Stelle.

    Danke, das wollte ich hören - ich war mir unsicher.



  • Kolumbus schrieb:

    Gut, also macht das für einfache Typen (int, AnsiString, clock_t etc.) keinen Sinn.

    Einer dieser Typen passt nicht in die Aufzählung [und ist kein einfacher Typ] 🙂

    Allerdings ist mir nicht ganz klar, was in diesem Zusammenhang mit "threadsicher" gemeint ist... Meinst du, dass eine häufig aufgerufene Fkt. sinnvollerweise generell in einem eigenem Thread laufen sollte?

    Nein, damit ist gemeint, dass die Funktion auch sicher funktionieren sollte, wenn zwei verschiedene Threads sie zur gleichen Zeit aufrufen.



  • Bashar schrieb:

    Kolumbus schrieb:

    Gut, also macht das für einfache Typen (int, AnsiString, clock_t etc.) keinen Sinn.

    Einer dieser Typen passt nicht in die Aufzählung [und ist kein einfacher Typ] 🙂

    Hmm... also int kann ich ausschliessen und dann nehm' ich den 50:50 Joker. 😃
    Ich tendiere zu clock_t, welches in der time.h als long definiert ist. Aber das wäre dann trotzdem ein einfacher Typ...
    Also wird es eher AnsiString sein, welches ja eigentlich eine Klasse ist und nur als Typ in den Builder implemtiert wurde. AnsiString ist auch kein einfacher Typ (dann habe ich diese Eigenschaft wohl von AnsiString geerbt 🤡 ). Also nehme ich B - AnsiString passt nicht. Sie können das jetzt einloggen! 🕶

    Bashar schrieb:

    Allerdings ist mir nicht ganz klar, was in diesem Zusammenhang mit "threadsicher" gemeint ist... Meinst du, dass eine häufig aufgerufene Fkt. sinnvollerweise generell in einem eigenem Thread laufen sollte?

    Nein, damit ist gemeint, dass die Funktion auch sicher funktionieren sollte, wenn zwei verschiedene Threads sie zur gleichen Zeit aufrufen.

    Gut, das war ja einfach - Danke 🙂


Anmelden zum Antworten