sayso Geschrieben 18. Mai 2006 Teilen Geschrieben 18. Mai 2006 Hallo Kollegen, bräuchte mal Infos von Euch wie Variablen im Stack bzw. Heap abgelegt werden. 1) Stack: Variablen die ich normal mit int i oder char char[5000] anlege, werden ja auf den stack gelegt. 2)Heap: Allokiere ich speicher mit malloc,etc. werden sie ja im Heap abgelegt. Meine Frage ist nun: Wieviel KB/MB kann der Stack verkraften? Denn wenn ich viele Chars mit vielen Daten habe geht er ja irgendwann zur neige. (wieviel KB/MB ist Default) Wieviel KB/MB kann der Heap verkraften? (wieviel KB/MB ist Default) Ich denke mal das diese Werte OS-Spezifisch sein werden, oder? Und was passiert wenn z.B. der Stack nicht mehr aussreicht, lagert er das dann automatisch in den HEAP Bereich aus? oder spielen diese beiden Bereiche gar nicht zusammen. Wie funktioniert das zusammenspiel der beiden? wenn ich den Speicher mit free nicht mehr freigebe, was passiert mit dem Heap der während der Programmlaufzeit allokiert wurde? Kann ich die Defaults dafür irgendwie beim Programmstart setzen? Ihr merkt, ich habe nicht wirklich viel Ahnung wie diese Bereiche zusammen oder ineinander spielen... wäre super wenn ihr mir hier mit links oder antworten weiterhelfen könntet Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kratzy974 Geschrieben 19. Mai 2006 Teilen Geschrieben 19. Mai 2006 Der Heap ist dein Arbeitsspeicher + Virtuellen Speicher. Liegt also an deinem Systemspeicher. Der Stack ist am Start des Programms / Threads festgelegt, auf dem WinXP Rechner normalerweise 1 MB. Wenn der Stack voll ist, gibts ein Stackoverflow, sprich einen Absturz (undefinierter Zustand). Der Stack wird auch für die Aufrufe von Funktionen verwendet und Baut sich FiLo (First in / Last out) auf. Dabei werden auch die zu übergebenden Variablen (Parameter eine Funktion) auf dem Stack gespeichert. Dabei kann es natürlich bei rekursiven Aufrufen (eine Funktion ruft sich selber auf) zu Stackoverflows kommen, wenn dies nicht begrenzt wird. Stack ist wichtig und recht klein, also alle größeren Wünsche an den Heap richten. Grüße, Kristian Kratzenstein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 19. Mai 2006 Autor Teilen Geschrieben 19. Mai 2006 Der Heap ist dein Arbeitsspeicher + Virtuellen Speicher. Liegt also an deinem Systemspeicher. Der Stack ist am Start des Programms / Threads festgelegt, auf dem WinXP Rechner normalerweise 1 MB. Wenn der Stack voll ist, gibts ein Stackoverflow, sprich einen Absturz (undefinierter Zustand). Hallo, erstmal danke für die Antwort :nett: Kann ich die Größe des Stacks beim Programmstart bzw. Start eines Threads festlegen, wenn ja wie? Gibt es auch eine Möglichkeit (z.B. über Debugging) herauszufinden, wieviel KB/MB das Programm/Thread zur Zeit vom Stack belegt? Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kratzy974 Geschrieben 19. Mai 2006 Teilen Geschrieben 19. Mai 2006 This is compiler and system dependend. To set the Stacksize with VC++ you could use the compiler option /F I didn't see any debug information for current stacksize. But I didn't need that information. But : At normal you don't get Stackoverflows, when you use for larger memoryparts (the char[1000] thing) the heap. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kratzy974 Geschrieben 19. Mai 2006 Teilen Geschrieben 19. Mai 2006 Sprachwirrwarr im Kopf, Also nochmal : Stack kann mit /F unter VC++ angepasst werden (Kompileroption). Für Threads gibt es eigendlich immer Befehle. Stackgröße hatte ich bisher nicht in den Debug informationen gesehen (andere Kompiler haben das vielleicht, vielleicht auch der VC*, weiß bloß nicht wo). Aber der Stack sollte eigendlich kein Problem sein, wenn men damit nicht vorsätzlich verschwenderisch umgeht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 22. Mai 2006 Teilen Geschrieben 22. Mai 2006 Hallo, Hallo Kollegen, bräuchte mal Infos von Euch wie Variablen im Stack bzw. Heap abgelegt werden. 1) Stack: Variablen die ich normal mit int i oder char char[5000] anlege, werden ja auf den stack gelegt. Ja, sollte so sein. Allerdings ist die Größe und das Handling des Stacks vom Betriebssystem und Compiler abhängig. Unter Linux/Unix wird beispielsweise meist der Stackpointer einfach entsprechend angepasst, unter Windows wird für Konstrukte der Art char grossesArray[1024*1024*16]; die Funktion alloca() bemüht. Früher[tm] gab es bei vielen Systemen (auch unter Unix, beispielsweise HPUX oder Solaris) Einschränkungen bzgl. der maximalen Stackgröße eines Prozesses, die dann mittels Kernel-Parameter angepasst wurden mussten. Mittlerweile ist die Stackgröße (zumindest bei Systemen mit "ix" am Ende) meist an den verfügbaren (virtuellen) Speicher/Prozess gebunden. Unix verrät die beispielsweise mit "ps" die Größe der Stacks für die laufenden Prozesse. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.