Frage von okarin, 80

Stack warum First in First out?

Hallo,

ich hab jetzt schon öfters vom Stack gehört und stell mir dabei immer die Frage welchen Sinn dieses Prinzip hat. Ich mein es wär doch viel logischer wenn man etwas von vorne nach hinten ablegt und es dann wieder von vorne nach hinten rausholt. Warum macht man das so das man es von hinten nach vorne drauflegt und von vorne nach hinten abholt, hat das physikalische Gründe?

Vielen Dank für alle antworten

Antwort
von Ingoberta, 58

Auf was beziehst du dich denn "etwas konkreter"? 

In der "Realtwelt" kann ich mir folgendes Beispiel denken. Man bekommt sehr viele Aufgaben (nach einander). Noch bevor man diese alle komplett abarbeiten kann, kommt schon die nächste. Manchmal "erledigen" sich einige der Aufgaben auch, wann man nichts macht. Deswegen kann es auch sinnvoll sein, sich nach jeder Aufgabenabarbeitung die "neuste" wartende Aufgabe zu nehmen. 

So in die Richtung ... wenn man im Urlaub ist sammeln sich die Emails. Kommt man wieder, werden sich einige der alten Emails schon erledigt haben, da z. B. jemand anderes tätig geworden ist. Oder wenn es wirklich wichtig wäre, hätte man noch eine Erinnerung zu dem Thema bekommen. 

Antwort
von NeoExacun, 56

Es kommt immer auf die Daten an, die man verarbeitet. In vielen Fällen muss nunmal der letzte abgespeicherte Datensatz verarbeitet werden.

Wichtigstes Beispiel: Die Rücksprungadressen von Programmen. Programme springen ständig im Code hin und her. Nach Abarbeitung müssen sie wieder dorthin zurück, wo sie herkamen. Dazu werden die Rücksprungadressen oben auf den Stack gelegt und beim Zurückspringen wieder von oben nach unten abgearbeitet.

Kommentar von okarin ,

Ja aber ich hab mir das mal im assembler angeschaut und dann muss ich ja alles erst falschrum drauflegen aber warum sollte ich es nicht richtigrum drauflegen und es werden die dten dann einfach von unten und nicht von oben geholt?

Kommentar von NeoExacun ,

Du kannst es nicht andersrum drauflegen, weil du nicht weißt, wie groß der Stack wird. Du weißt beim ersten Sprung nicht, ob da jetzt noch 3 oder 300 Einträge darüber kommen. Außerdem brauchst du das erste Datum immer zuletzt, also wozu zusätzlichen Aufwand betreiben?

Expertenantwort
von LemyDanger57, Community-Experte für Computer, 52

Aber das ist doch genau so, wie Du es haben willst, denk mal nach.

Das neueste ist immer hinten und dass älteste vorne. Also wird auch das älteste immer zuerst abgeholt. Es wird ja nicht von hinten(also vom letzten Platz) nach vorne abgelegt, sondern quasi "hinten dran", also immer auf dem ersten freien Platz.

Kommentar von okarin ,

Ne der Stack funktioniert doch andersherum das älteste ist hinten und das neueste vorne und die daten werden von vorne wieder geholt

Kommentar von LemyDanger57 ,

Nein, eben nicht, deswegen heißt es doch auch "First in, first out", Also was zuerst hineinkommt, geht auch zuerst wieder hinaus.

Kommentar von LemyDanger57 ,

Vergiss den Kommentar, Du hattest mich mit dem FIFO verwirrt, aber das wäre ja nicht Stack, sondern Queing, also Warteschlangen-Bildung. Wird übrigens auch oft verwendet.

Vielleicht hilft Dir der Artikel ja weiter: https://de.wikipedia.org/wiki/Stapelspeicher

Insbesondere der Abschnit "Mikroprozessoren", da steht auch etwas zu den Gründen, warum man Stapelspeicher verwendet.

Antwort
von Schachpapa, 29

Deine Überschrift passt nicht.

Stack ist Last in First out.

Wie bei einem Geschirrstapel. Der nach dem Spülen zuletzt aufgelegte Teller wird als erster wieder benutzt.

Das, was du gerne haben möchtest, gibt es auch:

Die Queue (Warteschlange) funktioniert nach dem Prinzip First in First out (Wer zuerst kommt, mahlt zuerst)

Kommentar von okarin ,

Ja sorry hab ich in dem Moment falsch gedacht. (Tue einfach so als ob da "warum nicht" steht statt "warum" dann ergibt alles wieder einen Sinn xD)

Keine passende Antwort gefunden?

Fragen Sie die Community