Hallo, ich bin Einsteiger in Sachen µC. Was ist eigentlich mit STack und Heap gemeint? Ich kenne nur ROM und RAM (Flash). Festspeicher und Arbeitsspeicher. Vielen Dank Yussuf
Stack und Heap sind ROM und RAM eines Computers. >>> EDIT durch Moderator: <<< >>> Achtung, liebe Schüler, nicht abschreiben. <<< >>> Diese Antwort ist falsch!!! <<<
Der Stack ist ein Stapel und der Heap ein Haufen. Ordentliche Programmierer legen Rücksprungadressen auf den Stack, schlampige lassen alles auf einem Haufen rumliegen... Guckst du ;-): http://de.wikibooks.org/wiki/C++-Programmierung/_Speicherverwaltung/_Stack_und_Heap#Auf_dem_Heap_.28deutsch:_Halde.29
Kan asta schrieb: > STack und Heap sind ROM und RAM eines Computers. Aber nur, wenn man die Chips davon auslötet und aufeinanderhäuft oder aufstapelt.
>Stack und Heap sind ROM und RAM eines Computers.
Schöne Hypothese ...
Stack ist vorrangig für die Zwischenspeicherung der Rücksprungaddresse
bei bei Unterfunktionsaufrufen, und evtl. irgendwelcher Register,
irgendwelche Daten/Variablen zuständig.
Heap für Abspeicherung irgendwelcher "Arbeitsdaten" im Speicher.
Beides ist letztendlich einfach nur RAM.
Ich versteh das irgendwie nicht. Meine Variablen die ich deklarierer werden also alle auf dem Stack gestapelt ?!Diese Ansammlung meiner Variablen ist also der Stack. und der Heap ist auch der ort wo ich meine Variablen speichere aber irgendwie gehäuft? :D
Yussuf1 schrieb: > Meine Variablen die ich deklarierer werden also alle auf dem Stack > gestapelt ?! Nur die lokalen einer Prozedur, nicht die globalen. Yussuf1 schrieb: > Diese Ansammlung meiner Variablen ist also der Stack. Falsch. Der Stack kann mehr. Yussuf1 schrieb: > nd der Heap ist auch der ort wo ich meine Variablen speichere aber > irgendwie gehäuft? Ein Haufen im RAM.
Yussuf1 schrieb: > Was ist eigentlich mit STack und Heap > gemeint? Hängt vom Kontext ab. Bei einem Compiler könnten das verschiedene Stacks sein, das ist dann in dem konkreten Compiler-Manual erklärt. Manche Compiler benutzen verschiedene Stacks für Calls, Variablen und Malloc. Peter
Reservieren und Allokieren geht nur mit einem Haufen. Stack u. Heap sind grundsätzliche Speicherformen. Das Basiswissen dazu sollte man sich nicht von irgendwelchen Trollen in irgendeinem Forum vorkauen lassen. Ein kurzer Blick in ein vernünftiges Buch tut nicht weh!
Kan asta schrieb: > Reservieren und Allokieren geht nur mit einem Haufen. Unsinn. http://www.kernel.org/doc/man-pages/online/pages/man3/alloca.3.html > Stack u. Heap sind grundsätzliche Speicherformen. Das Basiswissen dazu > sollte man sich nicht von irgendwelchen Trollen in irgendeinem Forum > vorkauen lassen. Ein kurzer Blick in ein vernünftiges Buch tut nicht > weh! Haha, richtig! Und trotzdem schreibst du hier schon deinen 3. Beitrag. "Stack" und "Heap" beschreibt, in welcher Art und Weise, bzw. mit welcher Logik irgendwas systematisch in einem Teil eines linearen(?) Speichers abgelegt wird.
Stack und Heap sind einfach nur 2 verschiedene Organisationsformen, wie SPeicher verwaltet wird. Bei einem Stack hast du einen sauber gestapelten Haufen Teller. Brauchst du welche, dann nimmst du die Teller von oben einzeln ab und wenn du die Teller zurückgeben willst, dann legst du sie in umgekehrter Reihenfolge wieder auf den Stapel drauf. Heap ist eine Kiste mit Tellern. Wer auch immer 10 Teller braucht, nimmt sich 10 Teller aus der Kiste (solange noch welche da sind) und wenn er sie nicht mehr braucht, wirft er sie zurück.
Karl Heinz Buchegger schrieb: > wirft er sie zurück. Man sollte in dem Kontext des Vergleichs vieleicht erwähnen, daß Karl Keinz Speicher-teller unzerbrechlich sind :-)
UR-Schmitt schrieb: > Man sollte in dem Kontext des Vergleichs vieleicht erwähnen, daß Karl > Keinz Speicher-teller unzerbrechlich sind :-) Nein, sind sie nicht. Aber wenn welche kaputt sind, kommt seine Frau und macht die Garbage Collection. mfg.
Aber wenn welche kaputt sind, kommt seine Frau und aligned die Teller wieder.
Karl Heinz Buchegger schrieb: > Heap ist eine Kiste mit Tellern. Wer auch immer 10 Teller braucht, nimmt > sich 10 Teller aus der Kiste (solange noch welche da sind) und wenn er > sie nicht mehr braucht, wirft er sie zurück. Ob der OT wohl versteht, daß Deine Kiste mit zunehmender Auslastung immer leerer wird, aber sein Heap immer voller ;)
Bronco schrieb: > Ob der OT wohl versteht, daß Deine Kiste mit zunehmender Auslastung > immer leerer wird, aber sein Heap immer voller ;) Ist alles ne Frage, wie man push und pop definiert. Und in welche Richtung der Stack wächst.
Kan asta schrieb: > Ist alles ne Frage, wie man push und pop definiert. Und in welche > Richtung der Stack wächst. Du verwechselt schon wieder was.
Kan asta schrieb: > Ist alles ne Frage, wie man push und pop definiert. Push und Pop auf dem Heap? Wohl eher Peek und Poke ;)
Bronco schrieb: > Push und Pop auf dem Heap? Wieso nicht?
1 | ...
|
2 | ptr = malloc( 500 ); |
3 | strcpy( ptr, "push, pop" ); |
4 | ...
|
Bronco schrieb: > Karl Heinz Buchegger schrieb: >> Heap ist eine Kiste mit Tellern. Wer auch immer 10 Teller braucht, nimmt >> sich 10 Teller aus der Kiste (solange noch welche da sind) und wenn er >> sie nicht mehr braucht, wirft er sie zurück. > > Ob der OT wohl versteht, daß Deine Kiste mit zunehmender Auslastung > immer leerer wird, aber sein Heap immer voller ;) Hmm. Da ist was drann. :-) So weit wird er ja doch noch abstrahieren können, dass die Teller für den freien Speicher stehen, der mit zunehmender Auslastung immer weniger wird.
Optimist! Jemand, der die grundlegendsten Sachen nicht im Internet findet?
Im Stack sind hauptsächlich temporäre Daten wie Rücksprungadressen und gesicherte Register. Der Stack wächst von oben nach unten (Anfang ist am oberen Ende des Rams). Wenn eine Funktion gecallt wird dann speichert das System die Rücksprungadresse und die Register auf den Stack. Wenn die Funktion dann fertig ist holt sie die Regel wieder in umgekehrter Reihenfolge zurück und springt dann letztendlich zurück . Im Heap lagern Variablen und Arrays welche dauerhaft auf einer festen Adresse liegen undkit nen Pointer genutzt werden. PS: auch wenn es jeden irgendwo nen obsoleten Controller gibt der das anderen HRS macht, hier gehts um den Standard und der sieht so aus...
Max D. schrieb: > Im Heap lagern > Variablen und Arrays welche dauerhaft auf einer festen Adresse liegen nö Max D. schrieb: > hier gehts um den Standard und der sieht so aus... naja
Der Stack ist ein Haufen RAM, auf den der wieder Speicher draufpacken muß, der ihn auch runter genommen hat. Der Heap ist ein Haufen RAM, wo ein anderer was rauf packen und runter nehmen kann. Dazu ist aber zusätzlicher Verwaltungsaufwand nötig. Zusätzlich kann es passieren, daß die Stücke nicht mehr lückenlos rein passen. Da muß dann der Garbage-Collector ran. Peter
Diese Informationen sind genau die ich gesucht habe :D das : Stack und Heap sind einfach nur 2 verschiedene Organisationsformen, wie SPeicher verwaltet wird. Bei einem Stack hast du einen sauber gestapelten Haufen Teller. Brauchst du welche, dann nimmst du die Teller von oben einzeln ab und wenn du die Teller zurückgeben willst, dann legst du sie in umgekehrter Reihenfolge wieder auf den Stapel drauf. Heap ist eine Kiste mit Tellern. Wer auch immer 10 Teller braucht, nimmt sich 10 Teller aus der Kiste (solange noch welche da sind) und wenn er sie nicht mehr braucht, wirft er sie zurück. + unzerbrechliche Teller + Ob der OT wohl versteht, daß Deine Kiste mit zunehmender Auslastung immer leerer wird, aber sein Heap immer voller ;) :D ich habs verstanden XD
@Yussuf1: Wow, du hast wirklich nur die korrekten Informationen aus den Posts entnommen. Ich bin stark beeindruckt. Max D. schrieb: > Im Stack sind hauptsächlich temporäre Daten wie Rücksprungadressen und > gesicherte Register. > ... Das hat überhaupt nichts mit Stack zu tun. Ein Stack ist wie oben genannt nur eine Organisationsform von Daten im Speicher. Was du meinst ist: Die meisten Mikroprozessoren benutzen einen Hardware-Stack in ihrem Hauptspeicher um Rücksprungadressen abzulegen. Es kann aber auch noch zusätzliche Stacks geben, um beispielsweise funktionslokale Variablen in Hochsprachen speichern zu können. Oft wird dafür aber der Hardware-Stack mitbenutzt.
Gibt es eigentlich auch einen TCP/IP-Heap (als Gegenstück zum TCP/IP-Stack)?
Kan asta schrieb: > Schon wieder falsch, Simon. Dein "Hardwarestack" hat einen Offset. Unsinn. Es gibt auch Hardware-Stacks die gar nicht im RAM operieren, sondern in Registerform gehalten werden. http://en.wikipedia.org/wiki/PIC_microcontroller#Stacks ATtiny11/12/15 Der Artikel hier ist doch ganz gut: http://www.mikrocontroller.net/articles/Stack Könntest du dir ja mal durchlesen, um in Zukunft nicht mehr so viel Unsinn zu erzählen.
Simon K. schrieb: > Kan asta schrieb: >> Schon wieder falsch, Simon. Dein "Hardwarestack" hat einen Offset. > > Unsinn. > Es gibt auch Hardware-Stacks die gar nicht im RAM operieren, sondern in > Registerform gehalten werden. Und wer ein Beispiel in der anderen Richtung sucht, der möge sich zb mal den Stack-Frame einer VAX ansehen.
Simon K. schrieb: > @Yussuf1: Wow, du hast wirklich nur die korrekten Informationen aus den > Posts entnommen. Ich bin stark beeindruckt. Daraus kann man schliessen, dass du zu viele Trolle gefüttert hast und Yussuf anscheinend kein Troll ist. > Gibt es eigentlich auch einen TCP/IP-Heap (als Gegenstück zum > TCP/IP-Stack)? Quark. Auch wurde nirgends behauptet, dass der Stack das Gegenstück zum Heap sei. Ist so, als würdest du einen Autositz als Gegenstück zum Handschuhfach betrachten...
Simon K. schrieb: > Es gibt auch Hardware-Stacks die gar nicht im RAM operieren, sondern in > Registerform gehalten werden. Da sage ich: Unsinn. Ein Stack ist immer in Hardware umgesetzt, entweder per Zeiger-Register, oder halt direkt in Registern. "Softwarestacks" existieren eigentlich nur zu Übungs- und Lehrzwecken.
Ist doch ganz einfach. Z.B. die Rücksprungandressen werden auf den Stack (stapel) gespeichert. Und wenn der Sack um fällt, liegt alles auf dem Heap (Haufen) SCNR
Kan asta schrieb: > Da sage ich: Unsinn. > Ein Stack ist immer in Hardware umgesetzt, entweder per Zeiger-Register, > oder halt direkt in Registern. "Softwarestacks" existieren eigentlich > nur zu Übungs- und Lehrzwecken. Du schreibst hier zum widerholten Mal Unsinn. Siehe Hardwarestacks der alten kleinen PICs. Siehe Stacks als Objekte in modernen objektorientierten Programmiersprachen.
Karl Heinz Buchegger schrieb: > Heap ist eine Kiste mit Tellern. Wer auch immer 10 Teller braucht, nimmt > sich 10 Teller aus der Kiste (solange noch welche da sind) und wenn er > sie nicht mehr braucht, wirft er sie zurück. UR-Schmitt schrieb: > Man sollte in dem Kontext des Vergleichs vieleicht erwähnen, daß Karl > Keinz Speicher-teller unzerbrechlich sind :-) Doch, die sind zerbrechlich. Das Zerscheppern der Teller heißt in der Fachsprache "Speicherfragmentierung" (lat. frangere brechen, fragmentum Bruchstück). Irgendwann sind die Bruchstücke so klein, dass kein Essen mehr darauf Platz hat. Dann müssen die Stücke wieder zusammengeklebt, der Speicher also defragmentiert werden :)
Oh UR-Schmitt, jetzt lass doch mal gut sein mit deinen langsamen Softwarestacks. Schon wieder Ferien?
Kan asta schrieb: > "Softwarestacks" existieren eigentlich > nur zu Übungs- und Lehrzwecken. Nö, die haben schon praktischen Sinn. Der AVR-GCC legt für lokale Variablen einen Stackframe an. Der IAR führt dagegen einen Softwarestack mit und kann dadurch schneller und codesparender arbeiten. Dafür wurde extra während der AVR-Entwicklung noch ein drittes Pointeregister hinzugefügt. Und beim 8051 wird der Softwarestack benötigt, sobald man das Large-Speichermodell (64kB RAM) auswählt, da der originale Stackpointer (max 256Byte) dann zu klein ist. Peter
Obwohl "frangere" zerbrechen heisst, wäre das mit der Speicherfragmentierung wohl eher mit meinem Labortisch zu vergleichen. Ich lege hier meinen Lötkolben ab, da die Lötsauglitze, dann dort noch das Lötzinn, das Multimeter muss auch noch Platz haben, dann (achtung, jetzt kommt ein kompliziertes Intermezzo) ein Stapel Papier - das wäre jetzt, um die Verwirrung komplett zu machen, ein Task, der einen eigenen Stack hat, der aber im Heap des Systems allokiert wird.... So. Und obwohl ich flächenmässig noch massig Platz auf dem Labortisch zur Verfügung habe, passt das Oszi jetzt einfach nicht mehr drauf. Entweder ich lege es auf den Lötzinn, oder auf das Multimeter, oder auf den Papierstapel.... Also muss ich erst mal alles beiseite räumen, so, dass alles in einer Ecke ist, und ich Platz habe für das Oszi. Das ist dann die Defragmentierung. :-)
Kan asta schrieb: > STack und Heap sind ROM und RAM eines Computers. Kan asta schrieb: > Ist alles ne Frage, wie man push und pop definiert. Und in welche > Richtung der Stack wächst. Im MKontext zu einem Heap wohlgemerkt Kan asta schrieb: > Ein Stack ist immer in Hardware umgesetzt Kan asta schrieb: > Oh UR-Schmitt, jetzt lass doch mal gut sein mit deinen > langsamen Softwarestacks. Schon wieder Ferien? Junge junge, du solltest wirklich erst mal selbst dein Wissen etwas erweitern, ehe du den Mund hier so voll nimmst. Es gibt eine Welt jenseits von 8K Code und 1K Ram Größe. Ach so wegen Ferien: Wenn du nicht weisst ob du schon wieder zur Schule musst dann hilft dir das vieleicht weiter: http://www.schulferien.org/Schulferien_nach_Jahren/2012/schulferien_2012.html
Rofl! Ist das lustig.. Zitat vom Wiki-Link: >Tun Sie dies nicht, erhalten Sie höchst bemerkenswerte Meldungen von >Laufzeitumgebung oder Betriebssystem. Göttlich! :D
Kan asta schrieb im Beitrag #2820163:
> Aus meiner Sicht reinster Schwachsinn,
Komm wieder runter und akzeptiere, dass es da draussen viele
Architekturen gibt, die du nicht kennst.
Im übrigen steht im C-Standard kein Wort von Stack und/oder Heap.
Den ganzen Thread kann man löschen. Das bi0chen, was korrekt ist, steht schon in jedem besseren Buch und im Netz. Der größte Teil hier ist für die Katz und ein Armutszeugnis für dieses Forum.
Stack oder Stapel – die hundertste Erläuterung Der Stapel ist eine einfache und schnelle Möglichkeit um Daten zu speichern. Eines der Hauptkriterien ist: Der Anwender braucht sich nicht um die Adressierung zu kümmern. Wie beim „echten“ Tellerstapel ist es unwichtig ob Du der Erste bist, der seinen Teller ablegt oder ob bereits Teller auf dem Stapel liegen. Ganz wichtig ist hierbei die Disziplin bzw. die Reihenfolge. Legst Du zwei Teller auf den Stapel, so musst Du auch wieder zwei Teller vom Stapel nehmen. Kommt jetzt zwischenzeitlich eine zweite Person und legt ihren Teller obenauf, so ist auch für sie ebenfalls unwichtig wie viele Teller auf dem Stapel liegen, wichtig ist nur dass die zweite Person ihren Teller auch als erstes herunternimmt. Dann können Sie wieder ihre Teller erreichen. Der oberste Teller den Sie herunternehmen ist natürlich der, den Sie als letztes darauf gelegt haben. Der darunterliegende Teller ist der den Sie zuerst auf den Stapel legten. Aus diesem Grunde hat sich für den Stapel auch der Name LiFo eingebürgert. Das ist das Kürzel für Last In – First out. Das Rein wird allgemein als Push, das Raus Pop genannt. Ein weiteres Rein kommt bei einem Unterprogrammaufruf (call) zustande und das zugehörige Raus beendet ein Unterprogramm (ret[turn]). Warum das Ganze. Es gibt viele Stellen im Programm, an denen vorübergehend Variablen und Werte aller Art gespeichert werden müssen. Das Schlüsselwort ist hierbei vorübergehend. Ein einfaches Beispiel: unsigned char Unterprogramm ( void ) [00] { [01] Var1 = 17; ; Register18 = 0x11 [02] Var2 = 20; ; Register19 = 0x14 [03] return Var2 * Var1; [04] } [05] ; Im Hauptprogramm [07] Var1 = 12; ; Register18 = 0x0c [08] Var2 = 45; ; Register19 = 0x2d [09] If (Var0 == 0) Var3 = Unterprogramm1(); [10] … [11] … Was passiert hier: Genaugenommen weis das keiner. Es gibt zwei Möglichkeiten. 1. 07, 08, 09, 10, 11 … 2. 07, 08, 09, 10, 00, 01, 02, 03, 04, 05, 11 … Der tatsächliche Ablauf ist wegen der Abfrage unbekannt. Relevant sind die folgenden Fakten: Ein Prozessor hat nur eine begrenzte Anzahl an internen (sprich schnellen) Speichern/Registern. Nicht alle Operationen können mit allen Registern durchgeführt werden. Der Stapel wird üblicherweise auf das physikalische Speicherende gesetzt. Z.B. 0x3FF. Auf der Stapelebene sieht der Ablauf folgendermaßen aus: Mit Verzweigung [07] 0x3ff [08] 0x3ff [09] 0x3ff [10] 0x3ff „11“ ; Der Aufruf einer Unterfunktion call sichert die Rücksprungadresse 0x3fe ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; verringert [00] 0x3fe ; Der Compiler weiss dass zwei Variablen „zerstört“ ; werden ; und sichert diese [01] 0x3fe „12“ ; Push Register18 0x3fd ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; verringert [01] 0x3fd „45“ ; Push Register19 0x3fc ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; verringert [02] ; Der ursprüngliche Inhalt von Register 18 wird , zerstört [03] ; Der ursprüngliche Inhalt von Register 19 wird ; zerstört [04] ; Irgendetwas ; Der Compiler weis das nun zwei Register restauriert ; werden müssen 0x3fd ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; erhöht 0x3fd „45“ ; Pop Register19 0x3fe ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; erhöht 0x3fe „12“ ; Pop Register18 0x3ff ; Der vom Prozessor verwaltete Stackpointer wird um 1 ; erhöht 0x3fe „11“ ; Neue Programmadresse [11] 0x3ff ; Hier weiter unabhängig ob verzweigt wurde oder ; nicht Wichtig: Das Erhöhen des Stackpointers NACH einem call- und push-Befehl gehört implizit zu den Befehlen. Das verringern des Stackpointers VOR einem ret(urn)- und pop-Befehl gehört ebenfalls dazu. Wie man in dem obigen Beispiel sehen kann, können verschiedene Typen von Werten bzw. Variablen auf (hier Adressen und Zwischenwerte) dem Stapel abgelegt werden. Vorteile: Wie man sehen kann, kann ein späterer Aufruf derselben oder einer anderen Unterfunktion, die gleichen Stapeladressen wiederverwenden. Weder der Programmierer noch der Compiler müssen wissen welche Adressen und welche Variablen abgelegt werden. Das aufgerufene Unterprogramm kann seinerseits Unterprogrammaufrufe, eventuell auch bedingte, enthalten. Wichtig sind nur drei Sachen: 1. Die Anzahl an Speicherungen muss gleich der Restaurierungen sein. 2. Die Reihenfolge (LiFo) muss eingehalten werden. 3. Die Gesamtzahl an Speicherungen ist begrenzt. Normalerweise werden die bekannten Variablen vom Compiler (hier) ab 0x000 abgelegt. Wächst der Stapel zu sehr, so kann er die „untersten“ (mit der höchsten Adresse) Variablen überschreiben. Vorsicht bei Rekursion und wenig Speicher Unterbrechungen währen ohne diese Struktur fast unmöglich. Der Programmablauf muss zu jeder beliebigen Zeit, an jeder beliebigen Stelle und in jedem beliebigen Zustand unterbrochen werden können. Dann muss die nächste Arbeitsposition (für den Rücksprung) gesichert werden und alle, in der Unterbrechungsroutine verwandten oder veränderten Register gesichert werden. Nach Beendigung der Unterbrechung können dann die Register wieder restauriert werden und das Programm an der Unterbrechungsstelle fortgesetzt werden. Das eigentliche Programm sollte von dieser Unterbrechung nichts mitbekommen und keiner der Beteiligten muss sich mit irgendwelchen Speicheradressen herumschlagen oder den Zustand des Stapels kennen. Wetten, dass sich jetzt ein ganzer Haufen Leute meldet, die das viel Besser wissen und meinen dass das ganz anders funktioniert, sowie das Beispiel ungeeignet ist.
Ein Stack ist zunächst einmal eine reine Datenstruktur. Was damit gemacht wird, ist dabei egal. Wo er liegt, ebenfalls. Genauso, was drauf liegt. Rein das LiFo ist wichtig. In einem µC wird gerne ein Stack für die Speicherung von Sprungquellen oder auch für lokale Variablen (auch zur Parameterübergabe an eine Funktion) verwendet. Dabei ist nicht unbedingt definiert, wo er beginnt und in welche Richtung er wächst. Es ist aber einfacher, man legt die Basis ans Speicherende und lässt ihn nach unten wachsen. Wenn normaler Speicher von unten nach oben aufgebaut wird, treffen sie sich daher gerne mal. Ein Heap ist entweder eine, oft auf Bäumen basierende, Datenstruktur. Auch hier ist also erst einmal egal, wo er abgelegt wird und was drin ist. Wichtiger Unterschied zum Stack - man kann auf jedes Element zugreifen, nicht nur auf das oberste. Oder ein Heap ist einfach dynamisch verwendbarer Speicher. Das kann nun ein fest definierter Speicherbereich sein (RAM eines µC) oder man muss diesen erst einmal vom Betriebssysten holen. In einem Heap kann man wunderbar weitere Heaps (Datenstruktur) oder Stacks ablegen. Christian
Kan asta schrieb: > Ein Stack ist immer in Hardware umgesetzt, entweder per Zeiger-Register, > oder halt direkt in Registern. "Softwarestacks" existieren eigentlich > nur zu Übungs- und Lehrzwecken. Verdammt, hat mal jemand einen Controller, der mir meine Klammerauflösung in Hardware macht? Soll ja nicht zu Übungs- oder Lehrzwecken sein ... Gruß Jobst
Naja, es gibt auch noch eine Datenstruktur, die nennt sich Heap: http://de.wikipedia.org/wiki/Heap_%28Datenstruktur%29
Klaus Wachtler schrieb: > Den ganzen Thread kann man löschen. Damit ginge der Nachwelt sicher nichts Wertvolles verloren...
Kan asta schrieb: > Ein Stack ist immer in Hardware umgesetzt, entweder per Zeiger-Register, > oder halt direkt in Registern. "Softwarestacks" existieren eigentlich > nur zu Übungs- und Lehrzwecken. Einige der RISC Prozessoren, wie etwa IBM Power(PC), besitzen in der für den Programmierer sichtbaren Architektur keinerlei Hardware-Support für einen Stack (der 8-Bit SC/MP auch nicht, aber das ist schon eine Weile her). Call/Return erfolgt über ein Register und was der Programmierer damit macht ist im Prinzip seine Sache.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.