: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 |
*** 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 |
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?