Liegen die Daten im Stack oder im Heap



  • Hallo zusammen,

    mir hat sich gerade ein Problem aufgetan.

    struct foo
    {
        int data[10];
    }
    
    int main()
    {
        foo *bar = new foo();
    }
    

    Wo liegt denn jetzt data? Auf dem Stack oder auf dem Heap?
    Ich bin mir nicht sicher. Meiner Meinung nach werden die auf den Stack geschoben, oder?

    Grüße


  • Mod

    bar liegt auf dem Stack, das worauf bar zeigt (also insbesondere bar->data), liegt auf dem Heap.

    (Oder man benutze die Begriffe "automatischer Speicher" und "Freispeicher", wenn man Standardsprech benutzen möchte, denn die genaue Implementierung dieser Konzepte ist nicht vorgeschrieben.)

    Wenn es dir um das Array in deinem struct geht: Es ist völlig ohne Belang, was dein struct enthält. Das struct auf das bar zeigt wurde mit new erzeugt und somit liegt der Inhalt dort, wo new ihn erzeugt hat.

    Dies gilt natürlich nicht mehr, wenn ein eventueller Konstruktor des structs indirekt Nutzdaten erzeugt, die dann eventuell woanders liegen können:

    struct vector
    {
      int *data;
    
      vector(): data(new int[5]) {}
    };
    
    int main()
    {
      vector foo;
      // foo liegt auf dem Stack.
      // Somit natürlich auch foo.data.
      // Aber nicht das, worauf foo.data zeigt.
    }
    


  • SeppJ schrieb:

    (Oder man benutze die Begriffe "automatischer Speicher" und "Freispeicher", wenn man Standardsprech benutzen möchte, denn die genaue Implementierung dieser Konzepte ist nicht vorgeschrieben.)

    Nur als Anmerkung: Wenn man der übersetzung glauben kann dann bedeutet "Heap" auf deutsch "Freispeicher" (Inn zusammenhang mit der Programmierung)
    Quelle: http://www.dict.cc/?s=heap



  • Nein, Freispeicher ist die Übersetzung von free store. Was natürlich mehr oder weniger dasselbe ist wie heap.


Log in to reply