Grundlegende Frage: nur objekt oder mit new



  • Der Stack ist begrenz in seinem Speicher. VS hat da Standardm. 1 MB.
    Braucht du mehr wird es eng.



  • stack und heap sind beides aufm Arbeitspeicher oder?

    und trozdem ist da der stack begrenzt?

    war frühr der stack nich driekt auf der CPU im cache oder so?



  • würd mich auch interessieren wie das wirklich wirklich genau funktioniert

    was für ne kapazität hat stack?



  • Die Stackgröße kann beim Kompiler eingestellt werden. Das Maximum ist aber Betriebssystemabhängig.



  • BorisDieKlinge schrieb:

    war frühr der stack nich driekt auf der CPU im cache oder so?

    es gibt verschiedene arten von stacks.
    für gewöhnlich haben CPUs mindestens einen stackpointer (ein internes register), den sie automatisch runterzählen, um die rücksprungadresse zu speichern wenn eine funktion aufgerufen und wieder hoch, wenn die funktion verlassen wird.
    zusätzlich legen viele compiler für lokale variablen sogenannte stackframes an. dabei wird z.b. sizeof(alle_lokalen_variablen) vom stackpointer abgezogen und beim verlassen der funktion wieder dazu addiert.
    ...und meistens 'wachsen' solche stacks von oben nach unten.
    🙂



  • BorisDieKlinge schrieb:

    stack und heap sind beides aufm Arbeitspeicher oder?
    und trozdem ist da der stack begrenzt?
    ...

    Muss ja begrenzt sein, weil doch der Arbeitsspeicher aus physikalischen Speicherzellen besteht, also reale Hardware ist.
    Kennst doch die SD-RAM- oder DDR-RAM-Speicherriegel ?



  • proggingmania schrieb:

    BorisDieKlinge schrieb:

    stack und heap sind beides aufm Arbeitspeicher oder?
    und trozdem ist da der stack begrenzt?
    ...

    Muss ja begrenzt sein, weil doch der Arbeitsspeicher aus physikalischen Speicherzellen besteht, also reale Hardware ist.
    Kennst doch die SD-RAM- oder DDR-RAM-Speicherriegel ?

    naja, stack-speicher von usermode prozessen können moderne betriebssysteme aber auch auslagern...



  • pale dog schrieb:

    ...
    naja, stack-speicher von usermode prozessen können moderne betriebssysteme aber auch auslagern...

    Wo wollen die damit denn hin ?



  • proggingmania schrieb:

    pale dog schrieb:

    ...
    naja, stack-speicher von usermode prozessen können moderne betriebssysteme aber auch auslagern...

    Wo wollen die damit denn hin ?

    irgendwo auf'n massespeicher, festplatte, paging file, swap partition...



  • Achja, da war doch mal was...stimmt, die Auslagerungsdatei, wenn der Arbeitsspeicher nicht reicht.



  • @proggingmania: Erst denken dann reden..;)

    Auserdem wollte ich damit sagen, das die größe der Arbeitspeichers (heute Zeit) im Verhältnis zum reserviern Stack ja enorm ist .. und bei massenspeichern noch ernomer... und mich deshalb frage wieso nur ein winziger teil für den stack benutzt wird... so das wars:)

    Und ja ich hatt sogar schonmal so ein Speicherriegel als Schlüsselanhänger;)



  • pale dog schrieb:

    ...irgendwo auf'n massespeicher, festplatte, paging file, swap partition...

    Auch die haben physische Grenzen.... "unbegrenzt" ist also nicht. 😉

    Gruß,

    Simon2.



  • BorisDieKlinge schrieb:

    @proggingmania: Erst denken dann reden..;)

    Hä? Was du wolle? Worauf ist das denn jetzt bezogen ? Das kommt für mich jetzt irgendwie aus der Luft gegriffen.

    BorisDieKlinge schrieb:

    Auserdem wollte ich damit sagen, ...

    Dann schreib doch eifach künftig dazu, was du sagen willst 😃
    Vielleicht könntest du auch eine Art Wörterbuch veröffentlichen, so nach dem Motto:
    Ich schreibe dies <-> meine aber das. 😃

    BorisDieKlinge schrieb:

    Und ja ich hatt sogar schonmal so ein Speicherriegel als Schlüsselanhänger;)

    Und, war der begrenzt ? 😃

    MfG, p. 🙂



  • Simon2 schrieb:

    pale dog schrieb:

    ...irgendwo auf'n massespeicher, festplatte, paging file, swap partition...

    Auch die haben physische Grenzen.... "unbegrenzt" ist also nicht. 😉

    sagt doch auch keiner, aber der adressraum von prozessoren ist 'immer begrenzt', während man seinen massenspeichervolumen fast immer erweitern kann.
    🙂



  • Also nach so vielen tollen Antworten muss ich mich ja mal wieder melden. 😃
    Da hätte ich dann mal eine abschließende Frage: Was ist besser? Im Programm die Variablen auf dem Stack zuweisen oder mit new auf den Heap?

    MfG tsp



  • Leg sie auf den Stack wenn es geht (sie also lokal sind und nicht zu groß) und auf den Heap wenn Du mußt (also die objekte dynamisch und/oder groß sind).



  • tsp schrieb:

    Was ist besser? Im Programm die Variablen auf dem Stack zuweisen oder mit new auf den Heap?

    hat beides vor- und nachteile. so eine frage kann man nicht allgemeingültig beantworten...



  • pale dog schrieb:

    Simon2 schrieb:

    pale dog schrieb:

    ...irgendwo auf'n massespeicher, festplatte, paging file, swap partition...

    Auch die haben physische Grenzen.... "unbegrenzt" ist also nicht. 😉

    sagt doch auch keiner, ...

    Naja, Dein Widerspruch gegen proggingmania:

    pale dog schrieb:

    proggingmania schrieb:

    BorisDieKlinge schrieb:

    stack und heap sind beides aufm Arbeitspeicher oder?
    und trozdem ist da der stack begrenzt?
    ...

    Muss ja begrenzt sein, weil doch der Arbeitsspeicher aus physikalischen Speicherzellen besteht, also reale Hardware ist.
    Kennst doch die SD-RAM- oder DDR-RAM-Speicherriegel ?

    naja, stack-speicher von usermode prozessen können moderne betriebssysteme aber auch auslagern...

    klang halt so.

    Gruß,

    Simon2.



  • tsp schrieb:

    ...Was ist besser? Im Programm die Variablen auf dem Stack zuweisen oder mit new auf den Heap?

    MfG tsp

    "Besser" ist undefiniert. 😉
    Mit "Stacksachen" hat man einen höheren "Komfort" (sprich: Compiler und Runtime nehmen Dir einiges ab und schaffen damit "Fehlerrobustheit") aber gleichzeitig auch engere Grenzen.

    Ich persönlich nehme Stackvariablen "per Default" und weiche nur in begründeten Ausnahmen davon ab.

    Gruß,

    Simon2.


Anmelden zum Antworten