Hallo Besucher, der Thread wurde 12k mal aufgerufen und enthält 78 Antworten

letzter Beitrag von syshack am

Daten in DATA-Zeilen ändern?

  • Genau wie den String-Spoeicher von MS-Basic als Heap zu bezeichnen...

    Keineswegs. Es wird ja nicht behauptet, dass der String-Spreicher als Heap organisiert ist. Er wird lediglich als String-Heap bezeichnet, ohne dass davon ableitbar wäre, dass es als (algorithmische) Heap-Struktur zu sehen ist (siehe später).
    Heap ist in der Informatik mehrfach belegt, zum einen als weiter gefassten Oberbegriff für alle möglichen ungeordneten oder geordneten Strukturen, die Datenelemente aufnehmen und nicht notwendigerweise nach LIFO- oder FIFO-Manier oder dgl. behandelt werden, besonders im Zusammenhang mit Strings und dynamischen Speicherverwaltungsmechanismen. Zum anderen und prominenter in der Algorithmentheorie wird der Heap oft z.B. im Kontext von Heap-Sort als sortierte Struktur gesehen, wo gewisse Eigenschaften herrschen, die etwa das Sortieren oder Suchen begünstigen.


    Bei Speicher- und String-Verwaltung ist speziell im englischsprachigen Bereich der Begriff gängig und üblich. Das kann natürlich in der jeweiligen persönlichen Wahrnehmung variieren. Es ist jedenfalls nichts, worüber man unterschiedlicher Meinung sein müsste oder oder gar Streitlustigkeit an den Tag legen müsste. ;)

  • Ich persönlich finde String-Stapel trotzdem gut, da die Strings tatsächlich wie im Stapel abgelegt werden.
    Bei der Müll-Bereinigung werden wie bei einem Bücherstapel eben auch Bücher aus der Mitte herausgenommen.
    Also auch, wenn Bücher aus der Mitte rausgenommen werden, bleibt es trotzdem ein Stapel und neue Bücher bzw. Strings werden wieder oben oder unten aufgelegt.


    Schönen Gruß.

  • Ich persönlich finde String-Stapel trotzdem gut, da die Strings tatsächlich wie im Stapel abgelegt werden.
    Bei der Müll-Bereinigung werden wie bei einem Bücherstapel eben auch Bücher aus der Mitte herausgenommen.
    Also auch, wenn Bücher aus der Mitte rausgenommen werden, bleibt es trotzdem ein Stapel und neue Bücher bzw. Strings werden wieder oben oder unten aufgelegt.

    Ja bitte, dann behalte diese sonderbaren, weil persönlichen Ansichten einfach für dich. Das ist nicht die Eigenschaft eines Stapels, dass man aus der Mitte etwas herausnehmen kann. Das kannst du nur, weil das ein offener Bücherstapel ist. Das ist genauso, wenn ich sage mein Haus hat 10 Türen, weil durch die Fenster kann ich das Haus ja auch rein und raus ...
    Aber im Einführen von Begriffen warst du ja noch nie zimperlich, schon gar nicht von Umsicht geprägt - von mir aus, aber bitte nicht hier. Es reicht eine einmalige Erwähnung und gut ist es. Damit sind all diese Bücher einfach ein Haufen, wo oben drauf gelegt wird und irgendwo raus genommen wird.
    Vermische nicht wahllos die Realweltbegrifflichkeiten mit den Begrifflichkeiten der Algorithmen- und Informationstheorie.
    Der Rest der Welt bleibt dabei das String-Bereich, String-Area oder String-Heap zu nennen. Es ist wirklich im Forum und sonst nirgendwo auf der Welt relevant, mit so einem Versuch, persönliche Begriffe unter die Leute zu bringen, was bestenfalls das Begriffschaos erhöht, sonst nichts. Deine Begrifflichkeit bringt außerdem nur Verwirrung, hinsichtlich des String-Descriptor-Stacks, nur um einen weiteren negativen Aspekt zu nennen.

  • Ja bitte, dann behalte diese sonderbaren, weil persönlichen Ansichten einfach für dich. Das ist nicht die Eigenschaft eines Stapels, dass man aus der Mitte etwas herausnehmen kann. Das kannst du nur, weil das ein offener Bücherstapel ist. Das ist genauso, wenn ich sage mein Haus hat 10 Türen, weil durch die Fenster kann ich das Haus ja auch rein und raus ...Aber im Einführen von Begriffen warst du ja noch nie zimperlich, schon gar nicht von Umsicht geprägt - von mir aus, aber bitte nicht hier. Es reicht eine einmalige Erwähnung und gut ist es. Damit sind all diese Bücher einfach ein Haufen, wo oben drauf gelegt wird und irgendwo raus genommen wird.
    Vermische nicht wahllos die Realweltbegrifflichkeiten mit den Begrifflichkeiten der Algorithmen- und Informationstheorie.
    Der Rest der Welt bleibt dabei das String-Bereich, String-Area oder String-Heap zu nennen. Es ist wirklich im Forum und sonst nirgendwo auf der Welt relevant, mit so einem Versuch, persönliche Begriffe unter die Leute zu bringen, was bestenfalls das Begriffschaos erhöht, sonst nichts. Deine Begrifflichkeit bringt außerdem nur Verwirrung, hinsichtlich des String-Descriptor-Stacks, nur um einen weiteren negativen Aspekt zu nennen.

    Zumal auch hierzu der String-"Stapel" von oben nach unten abgearbeitet werden muss, damit der String aus der Mitte a) gefunden und b) entfernt werden kann. Dann muss dieser "Stapel" wieder neu aufgebaut werden, eben um ein klarer Stapel zu sein. Einer der Gründe, warum die C64-GC so lange dauert.


    Im Übrigen ist auch jeder "Heap" ein "Stapel", nur dass idR auf einem Stapel gleichartige Werte abgelegt werden, während ein "Heap" eben kein sauberer Stapel ist, sondern ein "Haufen", auf dem wahllos Werte abgelegt werden können, von Registerinhalten über Rücksprungadressen bis zu freien Werten. Der Programmcode ist selbst verantwortlich, dass der Heap korrekt gehandelt wird.


    Da muss man nichts weiter verBIFfen. Volle Zustimmung, Jeek

  • Im Übrigen ist auch jeder "Heap" ein "Stapel", nur dass idR auf einem Stapel gleichartige Werte abgelegt werden, während ein "Heap" eben kein sauberer Stapel ist, sondern ein "Haufen", auf dem wahllos Werte abgelegt werden können, von Registerinhalten über Rücksprungadressen bis zu freien Werten. Der Programmcode ist selbst verantwortlich, dass der Heap korrekt gehandelt wird.

    Tut mir leid, aber hier kann ich dir nicht voll zustimmen: Das "idR" widerspricht so ziemlich jeder Prozessor Architektur mit Stapel (auf dem sich völlig unterschiedliche Dinge befinden, wie Rücksprungadressen, Parameter, lokale Variablen, trotzdem ist das noch immer ein Stapel, weil die Daten wieder so weggeräumt werden, wie sie gekommen sind, nämlich nach dem LIFO-Prinzip). Daher ist ist die These, dass jeder "Heap" ein "Stapel" ist, einfach nicht zu halten (weil ein Heap, wie auch immer er organisiert ist, sich nicht an das LIFO-Prinzip halten muss).
    Datenstrukturen sind durch die Operationen geprägt und definiert, wie Elemente hinzugefügt, entfernt und gesucht werden können. Da ist es im Grunde völlig egal, wie ein Datum beschaffen ist. Die Daten selbst sind somit opak (sollten es sein). Daraus kann man jedenfalls keine Unterscheidung zwischen Stapel und Heap ableiten. ;)

  • Gut, dann ist ein "unsauberer" Stapel eben für euch ein Heap.


    In jedem Fall findet die Ablage der Strings Stapel-ähnlich oder Listen-ähnlich statt.


    Oben und unten gibt es natürlich faktisch im Computerspeicher nicht, da es natürlich keine Schwerkraft gibt kann man in beide Richtungen stapeln.


    Im Prozessorstapel wird natürlich oben aufgelegt und wieder genommen.


    Während beim Stringstapel aus der Mitte genommen wird. Und danach wieder verdichtet.


    Schönen Gruß.

  • Gut, stimmt, bei äußerst strenger formaler Definition ist ein HEAP <> STACK, und zwar immer.


    Da sind HEAP und STACK dann komplett unterschiedlich aufgebaute Datenstrukturen.


    Insofern gilt dann: ein STACK ist NIE ein HEAP (kann zwar als eine Art LIFO-Heap benutzt werden, ist aber tatsächlich keiner) und
    ein HEAP ist NIE ein STACK (kann zwar durch speziellen Aufbau des Baums so gestaltet werden, als ob, ist aber keiner)


    Damit hat BIF keinen String-STACK (STAPEL) sondern einen HEAP, aber das Ergebnis bleibt dasselbe, nämlich die geBIFfte Definition ist gar keine, sondern ein Griff ins Klo. Es gibt einen String-HEAP, und Bäume aufzuräumen dauert halt länger als STAPEL zu bereinigen, besonders wenn das OS keine native Baum-Struktur anbietet und diese im OS codiert sein muss. Da verbrät dann CPU-Zeit.


    Danke nochmal für die formale und korrekte Aufklärung, Jeek, und BIF: geh endlich nach Weihnachten...

  • Für einen normalen Menschen wächst und schrupft ein Stapel nur in eine Richtung.


    Wenn ich etwas auf einen Haufen werfe, dann fällt es entweder nach links oder rechts und zwar zufällig.


    Ein Haufen dehnt sich also im Gegensatz zu einem Stapel in wenigstens zwei Richtungen aus.


    Daher sag ich Stapel bleibt Stapel und Haufen bleibt Haufen.


    Schönen Gruß.

  • Zum „Heap“-Begriff: Ich kenne den, neben der Baumdatenstruktur, auch als Bezeichnung für Speicher in dem dynamisch Bereiche belegt und freigegeben werden können. Und das ist nach meiner Auffassung beim C64 nicht nur der Bereich für die Zeichenketten, sondern insgesamt für die Variablen, nur das nur die Zeichenketten im Normalfall auch wieder dynamisch freigegeben werden (können). Wobei es ja auch BASIC-Erweiterungen gibt, die beispielsweise erlauben Variablen zu löschen oder Arrays neu zu dimensionieren.



    Auf dem C64 kommt einem der Begriff zum Beispiel beim BasicBoss-Compiler unter, wo man mit den Direktiven `£HEAPSTART` und `£HEAPEND` sagen kann wo die Unter- und Obergrenze liegt, die das Kompilat für Zeichenketten verwendet (alle anderen Variablen sind statisch).



    Die Turbo Pascal/Borland Pascal-Literatur nennt den Speicherbereich von dem man mit `New` oder `GetMem` Speicher anfordern und mit `Dispose` oder `FreeMem` zurückgeben kann Heap. Und es gibt auch Pointer `HeapOrg` und `HeapEnd` die dort auf den Anfang und das Ende des Speicherbereichs zeigen.



    Auch bei C- und C++-Compilern werden diese Speicherbereiche als Heap bezeichnet. Also zumindest bei (Open) Watcom C/C++, GCC, und cc65.

  • Genau das ist es ja: Sowohl String- als auch Variablenspeicher können nur neue Elemente zufügen. Die Variablen muß man komplett löschen; neue Strings werden selbst dann nicht in den Bereich eingefügt wenn Platz da wäre, und über die Garbage Collection brauchen wir erst gar nicht zu reden- klar, es _würde_ ein Heap gebraucht, aber erst die höheren Versionen legen die dazu nötigen Kontrollstrukturen an. Und selbst da wurde es nie als Heap bezeichnet.

  • Geht's jetzt schon wieder los? ;) Der Begriff "Heap" wird in der IT in zwei grundverschiedenen Bedeutungen verwendet, von denen eine durchaus auf den String-Speicher von BASIC passt. Die andere (die abstrakte Datenstruktur mit diesem Namen) ist in der Tat was völlig anderes.


    Ob man das damals (TM) so genannt hat oder nicht spielt, genau wie die Frage, ob es sinnvoll/effizient umgesetzt ist, nur eine untergeordnete Rolle. Wenn jemand von "String-Heap" im Zusammenhang mit CBM BASIC redet, müsste klar sein, was gemeint ist -- falsch ist es nicht, andere bevorzugen andere Begriffe -- so what :)

  • Genau das ist es ja: Sowohl String- als auch Variablenspeicher können nur neue Elemente zufügen. Die Variablen muß man komplett löschen; neue Strings werden selbst dann nicht in den Bereich eingefügt wenn Platz da wäre, und über die Garbage Collection brauchen wir erst gar nicht zu reden- klar, es _würde_ ein Heap gebraucht, aber erst die höheren Versionen legen die dazu nötigen Kontrollstrukturen an. Und selbst da wurde es nie als Heap bezeichnet.

    Hey mc71, lass es jetzt gut sein. Die Garbage Collection ist "die" Methode, einen Heap/Space in "Ordnung" zu bringen und Speicherblöcke bzw. Elemente dort zurück zu geben. Richtig, höhere Versionen (von? BASIC nehm ich an) haben aber auch nur mehr Kontrollstruktur für die GC, aber nicht um besser Speicher bei der Vergabe an sich zu reklamieren.
    Schau dir die Operating Systems Literatur und Papers an und da wirst du die Begriffe in diesem Kontext finden. Sie jetzt kategorisch als nicht existent bezeichnen zu wollen und hier jetzt ein persönliche Sichtweise aufzudrängen, gleitet jetzt schon fast ins Trollen ab ...

  • Bitte lest mal wieder zur Abwechslung den Threadtitel, bevor Ihr hier einen Heap Religionskrieg entfacht.

    Das ist weder eine Religion noch ein Krieg. Wie nennt man das denn denn schnell, wenn man man nur seine eigene "engere" Auffassung postuliert und sich gegen andere liberalere, breiter gestreute, wohl bekannte Ansichten stellt bzw. sie negiert? ?(
    Ich hab schon in #68 die Schließung des Threads beantragt. An mir soll es nicht liegen. Solange aber der offen ist und unentwegt als Plattform missbraucht wird, gewisse Meinungen zu verbreiten, fühle ich mich genötigt, diese zurecht zu rücken (weil sie nicht unwidersprochen, sonst vielleicht gar als Fazit das Diskussionsende verzerrt darstellen könnte).