Wann ist etwas auf dem Heap/Stack?
-
Was haltet ihr dann von der Empfehlung, dass ich Objekte mit new erzeuge, da sonst der Stack irgendwann voll ist?
-
Sone schrieb:
Besser:
MyClass m;das ist nicht besser, das ist lediglich ein anderer anwendungsfall,
wenn z.b. zur kompilierzeit die objekte oder deren anzahl nicht feststeht.
-
Zisko schrieb:
Was haltet ihr dann von der Empfehlung, dass ich Objekte mit new erzeuge, da sonst der Stack irgendwann voll ist?
Musst du nie! Dafür gibt es STL-Container (die automatisch alle Objekte im Heap allokieren) und
std::(basic_)string.
-
um stack größen würde ich mir keine sorgen machen, solange man nicht statische arrays der größe xxxtausend macht, sollte das passen. für alles adnere gibt es die STL-Container
Kellerautomat schrieb:
Skym0sh0 schrieb:
wie man rauskriegt wo was liegt
Da gibts nix rauzukriegen. Die Regeln sind simpel und intuitiv.
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?
-
Skym0sh0 schrieb:
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?Und was soll das bringen?

-
wie gesagt, ichv erweise auf das entsprechende kapitel in more effective c++...
-
Ich bin Regelungstechniker, der nun auch die Aufgaben der Programmierung für Signalprozessoren mitübernehmen soll, da in unserem kleinem Entwicklungsteam der Programmierer die Stelle gewechselt hat.
Muss ich mir bei eingebetteten Systemen auch keine Gedanken um den Stack machen?
-
Skym0sh0 schrieb:
um stack größen würde ich mir keine sorgen machen, solange man nicht statische arrays der größe xxxtausend macht, sollte das passen. für alles adnere gibt es die STL-Container
Kellerautomat schrieb:
Skym0sh0 schrieb:
wie man rauskriegt wo was liegt
Da gibts nix rauzukriegen. Die Regeln sind simpel und intuitiv.
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?http://www.codeproject.com/Articles/35206/Pointer-pointing-to-Stack-or-Heap :p
-
Zisko schrieb:
Muss ich mir bei eingebetteten Systemen auch keine Gedanken um den Stack machen?
Das ist die falsche Frage.
Es geht nicht um Stack vs Heap. Die wirkliche Frage ist die Lebenzeit eines Objektes.
Soll es weiter existieren wenn der Scope verlassen wird oder nicht. Und wenn ja, per Kopie oder das Original.Du kannst 100GB an Daten in einen std::string schreiben der auf dem Stack liegt ohne dass der Stack explodiert (genug VRAM vorausgesetzt ;)).
-
http://stackoverflow.com/questions/1350819/c-free-store-vs-heap
Mit den Begriffen ist das auch etwas verwirrend.Zu new/delete:
Google nach:
RAII
-
Zeus schrieb:
Skym0sh0 schrieb:
um stack größen würde ich mir keine sorgen machen, solange man nicht statische arrays der größe xxxtausend macht, sollte das passen. für alles adnere gibt es die STL-Container
Kellerautomat schrieb:
Skym0sh0 schrieb:
wie man rauskriegt wo was liegt
Da gibts nix rauzukriegen. Die Regeln sind simpel und intuitiv.
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?http://www.codeproject.com/Articles/35206/Pointer-pointing-to-Stack-or-Heap :p
ach weil das ja so plattformunabhängig ist
-
Skym0sh0 schrieb:
Zeus schrieb:
Skym0sh0 schrieb:
um stack größen würde ich mir keine sorgen machen, solange man nicht statische arrays der größe xxxtausend macht, sollte das passen. für alles adnere gibt es die STL-Container
Kellerautomat schrieb:
Skym0sh0 schrieb:
wie man rauskriegt wo was liegt
Da gibts nix rauzukriegen. Die Regeln sind simpel und intuitiv.
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?http://www.codeproject.com/Articles/35206/Pointer-pointing-to-Stack-or-Heap :p
ach weil das ja so plattformunabhängig ist

Das die Funktion gar inline assembler verwendet macht Sie letzten Endes nutzlos.
-
Sone schrieb:
Das die Funktion gar inline assembler verwendet macht Sie letzten Endes nutzlos.
Warum?
-
Sone schrieb:
...
OMG bitte halte endliche die Fresse. Das ist ja nicht mehr erträglich mit Dir...
-
Sone schrieb:
Skym0sh0 schrieb:
Zeus schrieb:
Skym0sh0 schrieb:
um stack größen würde ich mir keine sorgen machen, solange man nicht statische arrays der größe xxxtausend macht, sollte das passen. für alles adnere gibt es die STL-Container
Kellerautomat schrieb:
Skym0sh0 schrieb:
wie man rauskriegt wo was liegt
Da gibts nix rauzukriegen. Die Regeln sind simpel und intuitiv.
achja?
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?http://www.codeproject.com/Articles/35206/Pointer-pointing-to-Stack-or-Heap :p
ach weil das ja so plattformunabhängig ist

Das die Funktion gar inline assembler verwendet macht Sie letzten Endes nutzlos.Warum? Schauen ob ein Pointer auf dem Stack/Free-Store liegt ist eine low-level Sache und ASM kann da schon angebracht sein.
-
Skym0sh0 schrieb:
pass auf, ich gebe deiner funktion ein objekt und deine funktion sagt mir ob heap oder stack. ok?
Ganz einfach. Dort, wo der Caller es angelegt hat. Was war daran jetzt so schwer?
-
Ich weiß nicht, wer hier die ungenannte Frage beantwortet hat, ein gegebenes Objekt darauf zu überprüfen, ob es im Heap oder Stack liegt, ich möchte nur noch einmal betonen, dass das fern der Frage des TEs liegt und ich daher alle, die sich über genannte Frage ausgelassen haben, des Zeitüberflusses oder bestenfalls Rieseninteresses bzgl. des Themas bezichtigen muss.
PS: Solch eine Antwort zu verfassen steckt mich aber im Bezug auf meine Bezichtigung in die selbe Ecke.
-
otze schrieb:
Sone schrieb:
Das die Funktion gar inline assembler verwendet macht Sie letzten Endes nutzlos.
Warum?
Weil die Syntax für den Inline Assembler dann auch noch Implementation-Defined ist...
Klar ist nutzlos stark übertrieben, nur dass ich dann den Code noch an meinen Compiler anpassen muss kotzt mich sowas von an.
P.S.: Erst jetzt herausgefunden, das GAS ja plattformunabhängig ist. Doof geguckt.

-
Shade Of Mine schrieb:
Zisko schrieb:
Muss ich mir bei eingebetteten Systemen auch keine Gedanken um den Stack machen?
Das ist die falsche Frage.
Es geht nicht um Stack vs Heap. Die wirkliche Frage ist die Lebenzeit eines Objektes.
Soll es weiter existieren wenn der Scope verlassen wird oder nicht. Und wenn ja, per Kopie oder das Original.Du kannst 100GB an Daten in einen std::string schreiben der auf dem Stack liegt ohne dass der Stack explodiert (genug VRAM vorausgesetzt ;)).
OK, und jetzt versuch' mal ein 100GB grosses Array auf dem Stack anzulegen.
-
Da fällt mir ein, eigentlich stimmt das hier doch so nicht
Die Member einer Klasse befinden sich dort, wo sich die Instanz befindet.
Wenn ich einen vector ohne new erstelle, dann nutzt der doch trotzdem new/delete und somit ist das, was er so intern damit macht, auf dem Heap.
Also ist erstmal zwar alles auf dem Stack, was man ohne new/delete anlegt, aber new sorgt dafür, dass alles Weitergehende dann auf dem Heap liegt.