Skip to main content

Stack overflow

Was ist ein Stack Overflow?

Ein Stack Overflow (Stapelüberlauf) kann in einem Computerprogramm aufgrund übermäßiger Speicherauslastung auftreten. Diese übermäßige Speichernutzung tritt auf dem Call Stack (Aufruf-Stapel) auf, in dem Information bezüglich der aktiven Unterroutinen in einem Programm gespeichert werden. Der Aufrufstapel hat nur eine begrenzte Menge an Speicher verfügbar. Seine tatsächliche Größe wird durch unterschiedliche Faktoren wie die genutzte Programmiersprache, die Architektur von Hardware und Betriebssystem, die Verfügbarkeit von Multithreading auf der CPU und den verfügbaren Speicher bestimmt. Es hat also damit zu tun, wie der Computer selbst Daten verwaltet und wie die darauf laufenden Programme sie nutzen.

Wenn es zu einem Stack Overflow kommt und ein Stapelüberlauffehler auftritt, stürzt das Programm, dessen Ausführung diesen verursacht hat, normalerweise ab. In Folge dessen kann das Programm entweder einfrieren oder außerplanmäßig beendet werden. Nicht gespeicherte Daten oder Arbeitsstände gehen verloren. Der Stack Overflow Fehler wird oft durch eine Endlosschleife in der Programmierung oder durch die Erstellung von Variablen (und entsprechende Reservierung von Speicherplatz) verursacht, die für die Kapazität des Aufruf-Stacks zu groß sind.

Stack Overflows auf Desktop PCs sind selten geworden

Das Problem des Stack-Überlaufs ist auf den neueren Betriebssystemen inzwischen nicht mehr so verbreitet wie in früheren Zeiten, jedoch kann es aufgrund des geringen Platzangebots auf mobilen Geräten zu einer Herausforderung werden. Wenn ein Betriebssystem auf einem mobilen Gerät einen Stack Overflow feststellt, kann dies verschiedene Ursachen haben. So werden möglicherweise zu viele Anwendungen zur gleichen Zeit ausgeführt, ein Virus verwendet Stapelspeicher oder das Gerät enthält fehlerhafte Hardware. Bei einem Stack Overflow auf Mobilgeräten sollten Nutzer deswegen die Intensität der App-Nutzung und den Virenschutz überprüfen und gegebenenfalls eine Speicherdiagnose-App auf dem Mobilgerät ausführen, um festzustellen, ob dies zur Behebung des Fehlers beiträgt.

Vom Konzept her ist ein Stack (Stapel) im Wesentlichen genau das, wonach es sich anhört. Ein Stapel von Informationen. Programme und Betriebssystem können Dinge auf den Stapel legen und Dinge vom Stapel nehmen. Das klingt trivial und zunächst möglicherweise nutzlos, aber als Endanwender sollte man darauf vertrauen, dass es auf Mikroprozessoren aller Art tatsächlich ein grundlegendes und unglaublich nützliches Konzept darstellt.

Jedes laufende Programm hat gewissermaßen seinen eigenen Stapel irgendwo im Speicher des Computers. Aber da im Speicher noch vieles außerhalb der Ausführung eines bestimmten Programms passiert, ist jedem Stack nur eine begrenzte Teilmenge des insgesamt verfügbaren Speichers zugewiesen. Dabei muss man als Anwender hoffen, dass jedem Programm

a) genug Platz für den Ablauf des Programms unter Berücksichtigung aller Eventualitäten reserviert wird und

b) dass Programme keine Fehler in der Programmierung beinhalten, die es veranlassen würden, Dinge auf den Stapel zu legen, ohne sie so bald wie möglich oder überhaupt wieder vom Stack zu nehmen. Wenn Programme zu viel auf den Stapel legen, kann dies zu einem Überlauf führen. Was passiert, nachdem ein Stack Overflow eingetreten ist, hängt davon ab, wie die entsprechende Software im Einzelnen geschrieben ist.

Was verursacht einen Stack Overflow?

Was genau letztendlich zu einem Stack Overflow führt, hängt in der Realität maßgeblich davon ab, wie die betreffende Software geschrieben wurde. Letztendlich ist jeder Stapelüberlauf, den man als solchen erkennen kann, irgendwo ein Fehler. Die häufigste Ursache für einen Stapelüberlauf ist eine übermäßig tiefe oder unendliche Rekursion, bei der sich eine Funktion so oft aufruft, dass der benötigte Platz zum Speichern der Variablen und Informationen für jeden Aufruf zunimmt, bis die Stack-Kapazität überschritten wird.

Die andere Hauptursache für einen Stack Overflow resultiert aus dem Versuch, mehr Speicher auf dem Stack zuzuweisen, als erlaubt, zum Beispiel durch das Erstellen von zu großen lokalen Array-Variablen. Aus diesem Grund empfehlen einige Autoren, dass Arrays, die größer als einige Kilobytes sind, grundsätzlich dynamisch als lokale Variable zugewiesen werden sollten.

Weiter hilfreiche Artikel finden Sie in unserem Online Marketing Glossar!

Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG

Stack overflow
1 (20%) 2 votes