Wo werden globale Variablen gespeichert ?



  • Hallo,

    wo werden lokale oder globale Variablen gespeichert ?



  • Im RAM.



  • Oder in einem Register. Oder gar nicht.



  • Oder .data oder .bss.



  • lokale aufm stack
    globale im heap



  • steak schrieb:

    lokale aufm stack
    globale im heap

    Nö. Globale im Datensegment. Nicht auf dem Heap.

    Der Lehrer will wohl wissen:
    lokale aufm stack
    globale im datensegment

    Das sollte als Modell auch völlig reichen, denn die ganzen Optimierungen fühlen sich auch so an (static lokal ist was anderes).



  • In C++ gibt es drei Speicherbereiche:
    - automatischer Speicher (aka Stack)
    - statischer Speicher
    - Freispeicher (aka Heap)

    int liegt_im_statischen_speicher = 1729;
    
    int foo()
    {
      static int liegt_auch_im_statischen_speicher = 0;
      return liegt_auch_im_statischen_speicher++;
    }
    
    int main()
    {
      int liegt_im_automatischen_speicher = 31415;
      int *zeigt_in_den_freispeicher = new int(99);
      delete zeigt_in_den_freispeicher;
      const char *zeigt_in_den_statischen_speicher = "Hello World!\n";
      char array_im_automatischen_speicher[] = "Hans Wurst";
    }
    

    Auf Namensraumebene gibt es quasi nur den statischen Speicherbereich. Daher braucht man "static" hier auch nicht. "static" bedeutet in diesem Kontext auch etwas anderes (wurde zweckentfremdet). Innerhalb von Funktionen liegen Variablen per default im automatischen Speicherbereich, wenn man "static" weglässt.

    kk



  • "static" bedeutet in diesem Kontext auch etwas anderes (wurde zweckentfremdet).

    Echt? Wusste ich gar nicht. Kannst du das erläutern?



  • theliquidwave schrieb:

    Echt? Wusste ich gar nicht. Kannst du das erläutern?

    static -Variablen auf Namensraum-Ebene haben interne Linkage, d.h. sie werden pro Übersetzungseinheit separat definiert. In C++ kannst du dieses Verhalten auch mit anonymen Namensräumen erreichen.


Log in to reply