Globale Variablen



  • Hallo,

    Lokale Variabeln werden im Stack gespeichert.

    Dann werden doch Globale Variablen im Heap gespeichert ?



  • Genaugenommen kommen die Worte "Stack" und "Heap" im ganzen C++ Standard kein einziges Mal vor. Globale Variablen haben static storage duration. Aber nope, sie liegen nicht am Heap...



  • Lol sie liegen nicht am heap und nicht am stack . Also separat im RAM oder ?



  • Google mal nach "data segment" und "bss segment".



  • .



  • Ich deklariere im main file eine Variable x. Wie kann ich nun in anderen Funktionen darauf zugreifen.

    //main.cpp

    int x = 5;
    

    // global

    //file1.cpp

    funk()
    {
    x++
    }
    

    //file2.cpp

    funk1()
    {
    x++;
    }
    


  • extern



  • Schau dir mal das Schlüsselwort extern an.



  • extern. In allen großeren Projekten müßte doch dann extern sehr oft vorkommen. Denn globale Variablen gibts ja immer mal. Ich frag mich grad wie man das z.B. in C# machen würde.



  • blurry333 schrieb:

    extern. In allen großeren Projekten müßte doch dann extern sehr oft vorkommen. Denn globale Variablen gibts ja immer mal. Ich frag mich grad wie man das z.B. in C# machen würde.

    Also soweit ich mich erinnern kann, bedeutet "extern", dass auf die Variable wirklich extern (auch von anderen Programmen usw.) zugegriffen werden kann?!

    Ne, warum sollte das oft vorkommen? Die meisten Programme, vor allem Sicherheitsanwendungen, brauchen Sachen, auf die eben gerade NICHT jeder zugreifen kann.



  • hallo

    viele globale variablen? glaube ich eher nicht. btw. kann man variablen auch einer instanz mitgeben, wenn diese die benötigt. würde ich immer bevorzugen. so hat jedes objekt die daten, die es braucht. ganz globale dinge liegen in der regel eh in einer config-datei oder ähnliches, die kann ja auch ausgelesen werden.

    chrische



  • blurry333 schrieb:

    Denn globale Variablen gibts ja immer mal.

    Wie kommst du drauf?

    blurry333 schrieb:

    Ich frag mich grad wie man das z.B. in C# machen würde.

    So wie sonst auch: Am besten gar nicht.



  • Ja ich würde an deiner Stelle die Sache mit den globalen Variablen ganz schnell wieder vergessen.

    Mag sein, dass globale Variablen in einigen sehr seltenen Fällen Sinn machen (ich kenne nur 1 Fall, und selbst das ist nicht ganz gut).

    Globale Variablen bedeuten oft Fehldesign.



  • ... und vergiss C#!



  • blurry333 schrieb:

    Lokale Variabeln werden im Stack gespeichert.
    Dann werden doch Globale Variablen im Heap gespeichert ?

    Es gibt
    - den automatischen Speicher (wird manchmal Stack genannt)
    - den statischen Speicher
    - den Freispeicher (wird manchmal Heap genannt)

    int liegt_im_statischen_speicher = 23;
    
    int main()
    {
      static int liegt_auch_im_statischen_speicher = 42;
      int ein_int_im_automatischen_speicher = 999;
      int* zeiger_im_automatischen_speicher = new int(1729);
      // Der Ausdruck (*zeiger_im_automatischen_speicher) bezieht sich
      // auf ein im Freispeicher angelegtes int-Objekt.
      delete zeiger_im_automatischen_speicher;
      return 0;
    }
    

    blurry, wie, seit wann und warum lernst du eigentlich C++?


  • Mod

    krümelkacker schrieb:

    blurry, wie, seit wann und warum lernst du eigentlich C++?

    blurry333s zweiter Beitrag, 2010:
    http://www.c-plusplus.net/forum/p1844257#1844257
    Wer eine Weiterentwicklung sieht, möge sich bitte melden.

    Davor hat er das Forum aber schon ein paar Monate als Unregistrierter "blurry33" in den Wahnsinn getrieben, mit so schönen Threads wie "Problem", "Frage" und "komme nicht weiter".

    Google: blurry33 2009 site:www.c-plusplus.net

    Ich hoffe, das räumt endlich die Restzweifel aus, dass der euch alle nur veräppelt.



  • Gerade in der Thread Programmierung sind doch globale Variablen gang und gebe?? Wozu gibt es denn auch semaphore und mutexe und ähnliches. Natürlich kann dies auch alles in der main funktion geschehen.



  • Nein, Nein, Ja.



  • Die statischen Variablen liegen aber auch auf dem Stack.



  • Nee die statischen Variablen liegen im Data Segment. Also nicht im stack aber auch nicht aufm heap. Obwohl der heap wohl zum data segment gehört.


Log in to reply