Probleme mit Array und Visual Studio



  • Don06 schrieb:

    Es gibt in C++ einen "free store" von dem man Spiecher mittels operator new holen kann. Dieser Speicher kann, muss aber nicht, wie ein Heap organisiert sein. (Was nichts an der Tatsache ändert, dass es meistens so ist)

    Gruß
    Don06

    Zitat aus "The C++ Programming Language - Third Edition" by Bjarne Stroustrup:

    6.2.6 Free Store [expr.free]
    A named object has its lifetime determined by its scope (§4.9.4). However, it is often useful to cre-
    ate an object that exists independently of the scope in which it was created. In particular, it is com-
    mon to create objects that can be used after returning from the function in which they were created.
    The operator new creates such objects, and the operator delete can be used to destroy them.
    Objects allocated by new are said to be ‘‘on the free store’’ (also, to be ‘‘heap objects,’’ or ‘‘allo-
    cated in dynamic memory’’).

    EDIT: Und übrigens...

    Dravere schrieb:

    Kannst gerne mal den Standard danach durchsuchen, aber du wirst Mühe haben, das Wort zu finden, bzw. wahrscheinlich erst unter "25.3.6 Heap operations" 🙂

    Das Wort "heap" wird in dem obig genannten Standardwerk zur Programmiersprache C++ insgesamt 34 mal erwähnt, das erste mal auf Seite 44 und das letzte mal auf Seite 917. 😉


  • Administrator

    @JustSomeCoder,
    "The C++ Programming Language" ist auch nicht der C++ Standard. Es gibt ein eigenes Dokument für den C++ Standard und dort wirst du Heap nicht finden, zumindest nicht in diesem Zusammenhang.

    Wie Don06 gesagt hat, ist der "Free Store" meistens als Heap organisiert. Es gibt allerdings vom C++ Standard keine Vorschrift, dass dem der Fall sein muss. Deshalb hatte ich geschrieben, dass streng genommen, es wirklich keinen Heap in C++ gibt.

    Da kannst du noch so oft Wikipedia oder Bjarn Stroustrup zitieren, es steht nun mal nicht im Standard drin. Tut mir Leid, es ist zwar eigentlich irgendwie sinnfrei, aber Tachyon hat recht.

    Grüssli



  • Dravere schrieb:

    Wie Don06 gesagt hat, ist der "Free Store" meistens als Heap organisiert.

    Es geht in keinster Weise darum ob und wie der "Free Store" als Heap organisiert ist, wie du das immer umschreibst.

    Tatsache ist, dass es prinzipiell zwei Arten von Speicher gibt;

    - Stapelspeicher, der zur Compilezeit bereits feststeht. Der STACK.
    - Dynamischer Speicher, der erst zur Laufzeit festgelegt wird. Der HEAP.

    Mit der Aussage es gäbe in C++ keinen Heap vertritts du gleichzeitig den Standpunkt, dass dynamische Speicherverwaltung in C++ unmöglich wäre, was selbstverständlich absoluter Schwachsinn ist.



  • JustSomeCoder schrieb:

    Mit der Aussage es gäbe in C++ keinen Heap vertritts du gleichzeitig den Standpunkt, dass dynamische Speicherverwaltung in C++ unmöglich wäre, was selbstverständlich absoluter Schwachsinn ist.

    Was führt dich zu diesem Fehlschluss? Es geht hier nur um die Begrifflichkeit, nicht um die Existenz eines dynamischen Speichers an sich...



  • JustSomeCoder schrieb:

    Mit der Aussage es gäbe in C++ keinen Heap vertritts du gleichzeitig den Standpunkt, dass dynamische Speicherverwaltung in C++ unmöglich wäre, was selbstverständlich absoluter Schwachsinn ist.

    Nein, du verwendest lediglich die falsche Terminologie.

    Was du unter Heap verstehst, heisst Free Store.



  • Don06 schrieb:

    Es gibt in C++ einen "free store" von dem man Spiecher mittels operator new holen kann. Dieser Speicher kann, muss aber nicht, wie ein Heap organisiert sein. (Was nichts an der Tatsache ändert, dass es meistens so ist)

    der heap ist nicht immer wie ein heap organisiert.



  • volkard schrieb:

    der heap ist nicht immer wie ein heap organisiert sein.

    Exakt! Dank sei Gott versteht endlich mal jemand worum's eigentlich geht.

    In der Programmierung spricht man immer von "Stack und Heap", als Synonym für Stapelspeicher und dynamischen Speicher.

    Ob der "Heap" letztendlich wie ein "echter Heap" organisiert ist, ist völlig irrelevant.



  • volkard schrieb:

    der heap ist nicht immer wie ein heap organisiert sein.

    ? Verwirr mich bitte nicht so. Was meinst du? Hab ich einen krassen Grammatikfehler drin, wie du? Oder ist das was ich geschrieben habe sinnfrei?



  • Don06 schrieb:

    volkard schrieb:

    der heap ist nicht immer wie ein heap organisiert sein.

    ? Verwirr mich bitte nicht so. Was meinst du? Hab ich einen krassen Grammatikfehler drin, wie du?

    nein, kein grammatikfehler.

    Don06 schrieb:

    Oder ist das was ich geschrieben habe sinnfrei?

    nein. kein sinnfehler.

    nur halte ich es für nutzlos pingelig das wort heap zu verbannen. heap hat für mich mehrere bedeutungen, vor allem
    - binärbaum mit integritätsbedingung, daß die kinder dicker sind als der papa.
    - der speicherbereich, da wo man mit malloc und free sachen holt und freigibt.


  • Administrator

    @JustSomeCoder,
    Ja, man verwendet zum Beispiel in C++ oft Heap und meint eigentlich den Free Store. Nichts desto trotz ist es eigentlich falsch. Deshalb sprach ich eben auch immer von streng genommen 🙂
    Ich habe diese Unterscheidung noch in keinem Lehrbuch gesehen, weil die Unterscheidung meistens irrelevant ist. Korrekt ist es allerdings trotzdem nicht, würde aber den Neuling nur unnötig verwirren.

    Edit: Wie es volkard eigentlich sagt. Die Unterscheidung ist völlig pingelig 😉

    Grüssli



  • manchmal unterscheide ich heap(malloc/free) und freispeicher(new/delete).
    dann muß der freispeicher nicht einmal dort sein, wo der heap ist. malloc/free sollten optimiert sein für größere speicherbrocken, so ab 1k, wie man sie sich in C gerne holt. new/delete dagegen sollten optimiert sein für winzige objekte, wie man sie sich in C++ dauernd holt für die polymorphie. da legt man ja oft viele winz-objekte mit new an, damit man deren zeiger in eine gemeinsame liste stopfen kann. drum kann auch

    int* p=new int; free(p);
    

    ganz hübsch ins auge gehen. new[]/delete[] wiederum dürfen für die typischen größen von malloc/free optimiert sein, aber zu den verwaltungsinformationen kommt normalerweise noch die anzahl der arrayelemente dazu.


Anmelden zum Antworten