2011-01-10 12 views
1

Markierte Zeiger sind eine allgemeine Optimierung bei der Implementierung dynamischer Sprachen: Nutzen Sie Ausrichtungsanforderungen, die bedeuten, dass die niedrigen zwei oder drei Bits eines Zeigers immer Null sind, und verwenden Sie sie zum Speichern von Typinformationen.Boehm und markierte Zeiger

Angenommen, Sie verwenden den Boehm Garbage Collector, der im Grunde funktioniert, indem er sich aktive Daten für Dinge ansieht, die wie Zeiger aussehen. Markierte Zeiger sehen nicht wie Zeiger aus, in dem Sinne, dass ihre niedrigen Bits ungleich Null sind.

Ist das ein Showstopper, d. H. Müssen Sie Zeiger mit Tags versehen, wenn Sie Boehm verwenden? Oder hat es ein Problem mit diesem Problem?

+0

Warum Boehm für eine Sprachimplementierung verwenden? Wenn Sie fortgeschritten genug sind, um darüber nachzudenken, ein paar Bits von Typinformationen zu speichern, können Sie sicherlich einen handangepassten GC schreiben, der nicht darauf eingeht und viel schlauer ist als Boehm für Ihre Sprache? Recht? – delnan

+1

Im Prinzip vielleicht, aber auf kurze Sicht ist es nicht unwesentlich besser als Boehm (beachten Sie, dass zB Mono es bis vor kurzem verwendete) und auf lange Sicht strebe ich nach Interoperabilität mit C (in diesem Szenario ist Böhm wohl ein nahezu optimaler Lösung). – rwallace

Antwort

2

AFAIK Boehm kann mit den richtigen Optionen umgehen. Es ist in der Lage, zu einem geringen Preis innere Zeiger zu erkennen. Es ist auch möglich, einen eigenen Scan-Code zu schreiben. Grundsätzlich gibt es wahrscheinlich genug Haken, um fast alles zu handhaben.

Ich habe meinen eigenen Sammler geschrieben, es ist präzise auf dem Haufen und konservativ auf dem Stapel. C-Zeiger werden nicht berührt. Für einige Anwendungen wird es schneller sein, weil es viel über meine Sprachobjekte weiß und sich nicht um andere Dinge kümmert, die zB mit herkömmlichen C++ - Destruktoren verwaltet werden.

Allerdings ist es nicht inkrementell oder generationsübergreifend und es behandelt auch keine Threads (es ist nicht schlau genug, Threads mit Signalen zu stoppen). Auf der positiven Seite erfordert es jedoch keine magischen Verbindungstechniken, die Boehm macht (um Mallocs usw. einzufangen). Auf der ernsthaften Minus-Seite können Sie verwaltete Objekte nicht in verwaltete Objekte einfügen.