Grundsatzfrage Stack Und Speicher
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Korrektur, Autor, Normalansicht)

Verändert: 11c11,13
:Für manche Anwendungen ist es sinnvoll, mit der Fehlersituation "zu wenig Speicher" so umzugehen, dass das Programm danach weiterarbeiten kann, für andere nicht. Die Behandlung von fehlgeschlagenen malloc()-Versuchen ist mühsam, aber nicht schwierig. Die Behandlung eines Stack-Überlaufs ist nichts, was auf portable Weise behandelt werden kann, wenn es überhaupt behandelt werden kann -- kw
::Für manche Anwendungen ist es sinnvoll, mit der Fehlersituation "zu wenig Speicher" so umzugehen, dass das Programm danach weiterarbeiten kann, für andere nicht. Die Behandlung von fehlgeschlagenen malloc()-Versuchen ist mühsam, aber nicht schwierig. Die Behandlung eines Stack-Überlaufs ist nichts, was auf portable Weise behandelt werden kann, wenn es überhaupt behandelt werden kann -- kw
*** Richtig. Ich wollte nur erklären, daß man bei heutigen CPUs/Betriebssystemen? darauf nicht so sehr achten muß und schon mal ein paar Gigabyte als maximale Größe definieren kann.
::: Rein theoretisch betrachtet ist natürlich trotzdem ein Stacküberlauf möglich und dann auch nicht portabel zu behandeln. --mb

Verändert: 27c29
*** Für dynamische Speicheranforderungen ist das "Konzept" nicht gut geeignet. Mit auto ist die Speicherklasse mit diesem Namen in der Programmiersprache C gemeint. Ein Stack ist eine mögliche und sehr natürliche Implementation dieser Speicherklasse, aber nicht die einzig notwendige. Von der sehr prozessorspezifischen Sichtweise abgesehen, dass Allokation auf dem Stack schneller gehen soll, bleibt das Argument, dass Objekte, deren Lebensdauer an den Gültigkeitsbereich eines Bezeicheners gebunden ist, nicht vergessen werden können. Ob die Implementation über einen Stack realisiert ist, spielt dabei keine Rolle. Ja, die Entscheidung über die Größe des benötigten Puffers trifft bei diesem Konzept immer die aufrufende Funktion, aber mit einem VLA in C90 kann sie diese Entscheidung datenabhängig treffen -- kw
*** Für dynamische Speicheranforderungen ist das "Konzept" nicht gut geeignet. Mit auto ist die Speicherklasse mit diesem Namen in der Programmiersprache C gemeint. Ein Stack ist eine mögliche und sehr natürliche Implementation dieser Speicherklasse, aber nicht die einzig notwendige. Von der sehr prozessorspezifischen Sichtweise abgesehen, dass Allokation auf dem Stack schneller gehen soll, bleibt das Argument, dass Objekte, deren Lebensdauer an den Gültigkeitsbereich eines Bezeicheners gebunden ist, nicht vergessen werden können. Ob die Implementation über einen Stack realisiert ist, spielt dabei keine Rolle. Ja, die Entscheidung über die Größe des benötigten Puffers trifft bei diesem Konzept immer die aufrufende Funktion, aber mit einem VLA in C99 kann sie diese Entscheidung datenabhängig treffen -- kw

von CeeStackKonzept
Ich hätte da ein paar Fragen dazu:
Wie ermittelst Du denn den maximal notwendigen Speicherbedarf? Oder legst Du einfach eine Grenze fest?

Findet er die Page nicht, fragt er das Betriebssystem, das ergibt manchmal die berühmte "Allgemeine Schutzverletzung" unter Windows.
Es ist damit möglich, mal eben locker festzulegen, daß z. B. das erste GByte des Adreßraums für das Programm und das zweite GByte für den Stack verwendet werden soll. Nur wo tatsächlich Speicher gebraucht wird, ist auch welcher vorhanden.
Andere Prozessoren können das höchstwahrscheinlich auch. --MichaelButscher
Für manche Anwendungen ist es sinnvoll, mit der Fehlersituation "zu wenig Speicher" so umzugehen, dass das Programm danach weiterarbeiten kann, für andere nicht. Die Behandlung von fehlgeschlagenen malloc()-Versuchen ist mühsam, aber nicht schwierig. Die Behandlung eines Stack-Überlaufs ist nichts, was auf portable Weise behandelt werden kann, wenn es überhaupt behandelt werden kann -- kw

Wie gehen deine Programm damit um, wenn sie nicht die einzigen sind, die zu einem bestimmten Zeitpunkt laufen?


Wie übergibst du Speicherbereiche zurück an die rufende Funktion, wenn du die Bereiche ausschließlich auf dem lokalen Stack hast?


StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 28. März 2001 0:01 (diff))
Suchbegriff: gesucht wird
im Titel
im Text