0 Daumen
2,4k Aufrufe

Ein Papierstapel, der auf dem Schreibtisch liegt,
und die Deckenhöhe erreicht? Input >> Output
Input ist Sehr Viel Größer als Output

Ein Problem, wenn in einer Schleife (Maschinensprache)
der Push Befehl nicht durch Pop aufgehoben wird?
Stacksegment (SS) macht wrap around?
War damals bei 65536 Bytes? Push DS, Pop SS, und die
CPU Schreibt den Stack in die Daten.

Das waren noch Zeiten, als der Sinclair ZX81, als Bausatz,
zu meinen Lötkolben kam.
Irgenwie Vermisse ich den Microsoft Macro Assembler 5.x.

Avatar von

1 Antwort

+1 Daumen

Auf dem Stack werden Parameter und lokale Variablen in einem Programm allokiert. Der Stack befindet sich typischerweise am oberen Ende des Adressraum. Ein Stack Overflow (zu Deutsch: "Stapelüberlauf") tritt auf, wenn man mehr Speicherplatz für Parameter/lokale Variablen anfordert als Stack-Space vorhanden ist.

In Java wird in diesem Fall ein StackOverflowError (https://docs.oracle.com/javase/8/docs/api/java/lang/StackOverflowError.html) getriggert. Dieser Fehler tritt häufig bei rekursiven Funktionen auf. Führt man das Programm

public class StackOverflowError {
public static void main(final String... args) {
StackOverflowError.recursive(1);
}

  public static void recursive(int n) {
  if (n == 0) {
  return;
  } else {
  recursive(n++);
  }
  }
}

erhält man die Fehlermeldung

Exception in thread "main" java.lang.StackOverflowError

Neben dem Stack gibt es auch den sogenannten Heap (Haufen), der ebenfalls speichertechnisch ausgereizt werden kann. Beispielweise liefert ein Aufruf der folgenden Primzahlprüffunktion 

public static boolean is_prime(final int to_check) {
        final String regex = "(..+?)\\1+|.?";
        return !new String(new char[to_check]).matches(regex);
}

mit is_prime(1000000000); folgenden Fehler:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Avatar von

mit is_prime(1000000000); folgenden Fehler:
Wie Groß war der Arbeitsspeicher?
Es gibt Hauptprogramme, und Kinderprogramme.  Kindprogramme können
Arbeitsspeicher Reservieren, so wie das Hauptprogramm auch.
Man Startet das Programm "Nerv mich". "Nerv mich" an alles. Wieviel
Arbeitsspeicher hast Du, PC? Ach so. Gib meinen Kind 90% davon. Den Zugriff,
auf mein Kind, Verhindere ich durch die Übergabe, dass das Kindprogramm
nur vom Vater aufgerufen werden darf!
Bitte, Wenden Sie in Hochsprachen keine Assembler-Routinen an.
int 13h read sector, das war schon gut, aber allocate memory ist Besser,
für "Nerv mich".

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community