lokale/globale Variable



  • Taurin schrieb:

    Sollte dann eine dieser Varianten schneller sein als die andere ?

    variante 1 macht ne riesige exe-datei. das laden von platte kostet naja, mußte selber messen.
    variante 2 besorgt vom bs in praktisch nullzeit viel ram und haut das voll. ist schneller.
    so wenigstens bei mir.

    aber: netterweise sind nullen default. und netterweise gibt win dem laufzeitsystem genullten speicher. kein mensch verlangt, daß es nur ein segment für globale variablen gibt. es kann eins für genullte globale variablen und eins für die anderen globalen geben. die genullten pages werden dann einfach zur laufzeit nach geeigneter schutzverletzung gezogen. wäre ideal schnell (rechnezeit wenig wie exe und keine ladewartezeit).
    kosten dafür wäre ein wenig verschnitt, also fürs neue segment wiedermal ne halbe seite (oder sogar noch mehr, wenn man so wenige globale variablen hat, wie sich's gehört).
    evtl noch kosten für schlechtere speicherlokalität zur laufzeit. die nullinitialisierte geheime bool isInited=0;, die zu jedem lokalen static-objekt gehört, sollte vielleicht besser beim objekt liegen.

    also würd mal sagen: ist ganz implementierungsabhängig.



  • bla bla bla



  • HumeSikkins schrieb:

    Lars schrieb:

    frischanswerk schrieb:

    Warum wird eine globale Variable mit 0 vorbelegt und eine lokale Variable nicht?

    Das ist normalerweise nicht so.

    Doch das ist normalerweise so. Zumindest für alle arithmetischen und Pointer Typen. Globale Variablen werden default-Initialisiert und das heißt bei diesen Typen nun mal 0.

    Default-Initalisierung = Default-Konstruktor?
    Wo kann ich das im Standard nachlesen?



  • [quote="HumeSikkins]Weil das Initialisieren von globalen Variablen nichts kostet.[/quote]
    Bist Du da ganz sicher?

    Wio steht dies im Standard, dass globale Variablen "genullt" werden?



  • bool array[GANZ_VIEL];
    fill(array, array+100, 0);

    Warum so kompliziert?

    bool array[GANZ_VIEL] = {false};
    

    Wio steht dies im Standard, dass globale Variablen "genullt" werden?

    3.6.2 "Initialization of non-local objects"

    Default-Initalisierung = Default-Konstruktor?
    Wo kann ich das im Standard nachlesen?

    8.5/p5

    Aber warum sucht ihr das nicht einfach selbst raus, wenn ihr so sehr zweifelt? Ich heiße schließlich weder "Mr. google" noch werde ich für das Wühlen im Standard bezahlt.



  • Ich sag nur Stichwort `static' versus `auto'. Variablen außerhalb einer Funktion
    sind automatisch static und nicht auto. Wenn ihr nicht wollt, dass sie von außerhalb dieses Moduls aka Datei mit `extern' eingebunden werden können, dann muss man noch mal `static' davor schreiben, dmit sie nur intern gelinkt werden.

    Gruß Tobias



  • @tobidope: warum muss deshalb (s.o. auto, static, extern) eine globale Variable mit 0 initialisiert werden?



  • @Hume
    Du kennst alle §en im Standard auswendig, du bist der wandelnde Standard 😃



  • HumeSikkins schrieb:

    bool array[GANZ_VIEL];
    fill(array, array+100, 0);

    Warum so kompliziert?

    bool array[GANZ_VIEL] = {false};
    

    *Vor den Kopf schlag*



  • Erhard Henkes schrieb:

    @tobidope: warum muss deshalb (s.o. auto, static, extern) eine globale Variable mit 0 initialisiert werden?

    Statische Variablen werden immer mit 0 initialisiert. Wurde so beschlossen, ist halt so. Deshalb haben auch globale Variablen initial den Wert 0.

    Gruß Tobias


Anmelden zum Antworten