Globale oder Lokale Variablen?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend,


    Ich bin mir nicht sicher, ob ich Variablen lokal oder global definieren soll.
    Beispielsweise für ein Haussystem, bei dem bei bestimmten Häusern Daten geladen werden.


    Beispiel:

    Spoiler anzeigen
    stock ShowHouseInfo(playerid,houseid)
    {
    new interior[5]={5,2,3,5,1};
    new standort[5][5]={"LV","LS","LV","SF"};
    new string[128];
    format(string,sizeof(string),"Das Haus ist in %i und hat Interior ID %i",standort[houseid],interior[housid]);
    SendClientMessage(playerid,blau,string);
    }


    Ich weiß, dass globale Variablen für immer vorhanden sind,
    lokale werden nach beendung der Funktion (oder der geschwiften Klammer) gelöscht,
    aber was ist in dem Fall besser? Die Variable jedes neu definieren beim Aufruf
    der Funktion 'ShowHouseInfo' oder sie global definieren?


    Was für Auswirkungen haben die beiden auf die CPU / RAM?


    LG
    Pille

  • new interior[5]={5,2,3,5,1};
    new standort[5][5]={"LV","LS","LV","SF"};
    Diese kannst du, sofern du die Namen später nicht weiter verwenden möchtest, der Einfachheit und Ordnung halber als Globale Variablen übernehmen.
    Das ständige belegen dieser Variablen in Funktionen kosten zwar nur unmerklich viel Zeit, bringt aber leichte Performanceeinbußen mit sich. :)

  • Was für Auswirkungen haben die beiden auf die CPU / RAM?


    LG
    Pille[/quote]


    Es gibt dabei kein unterschied bei globalen arrays werden diese in die .amx geschreiben daher wird diese auch so groß ist bei localen arrays
    macht sich bei stack/heap size jedoch bemerkbar also wird dort angezeigt. Das bedeutet letztendlich das sich da nix im letzt endlichen memory verbrauch ändern wird.


    //edit


    Hab noch den alten interesanten Post gefunden von Y_Less da ist auch der unterschied zwischen stack und globalem speicher beschrieben.
    http://forum.sa-mp.com/showthread.php?t=101322&page=3

  • Was ist denn nun für das o.G. Beispiel geeigneter?


    sowas kannst du global verwenden es ändert sich ja nix



    new interior[5]={5,2,3,5,1};
    new standort[5][5]={"LV","LS","LV","SF"};
    new string[128];
    zu dem verwende konstante werte ist schneller auch wenn es nur paar milisekunden sind
    zu dem kannst du auch 1 string für fast alles nehmen. den am besten vor dem überschreiben leeren es kommt jedoch immer drauf an mit welcher funktion und wie
    du den string bearbeitest bei format ist das nicht nötig