Was sind die realen Anwendungsfälle für markierte Zeiger? [geschlossen]

8

Was sind die realen Anwendungsfälle für markierte Zeiger?

Dies ist hauptsächlich auf das Lesen über kleine 64-Bit-Systeme und mögliche Verwendungen von 64-Bit-Wortzeigern zurückzuführen .

Nach meinem Verständnis sind markierte Zeiger Adressen, die aufgrund des möglichen Adressraums in dieser bestimmten Architektur zusätzliche Informationen in Bits enthalten können.

Aber ist es dann möglich, markierte Zeiger über triviale Fälle hinaus zu verwenden? Irgendwelche coolen Ideen / Beispiele?

Gibt es beliebte Bibliotheken, Frameworks, die 64-Bit-Zeiger über markierte Zeiger nutzen? Ist das auf jeder Hardware möglich?

auselen
quelle
5
Lisps verwenden häufig markierte Zeiger, um nahtlos zwischen Ganzzahlen und Bignums zu wechseln. Bei einem Tag wird die Adresse als int und bei einem anderen Tag als Zeiger auf ein Bignum interpretiert.
Patrick
2
Einige reale Verwendungen von markierten Zeigern: * Die Objective-C-Laufzeit unter Mac OS X 10.7 - mikeash.com/pyblog/… * Die Objective-C-Laufzeit unter iOS 7 unter ARM64 - mikeash.com/pyblog/friday-qa-2013- 09-27-arm64-and-you.html
niemand
natürlich eine abwertung ... wieder ... ohne kommentar.
Auselen
1
Diese Frage scheint nicht zum Thema zu gehören, da es sich um eine auf Umfragen basierende Frage handelt. Es wurden keine Kriterien angegeben, um eine bestimmte Antwort stärker hervorzuheben als jede andere Antwort.
Es geht also nicht um "Datenstrukturkonzepte"? ( programmers.stackexchange.com/help/on-topic ) hmm ...
auselen

Antworten:

4

Die Critbit-Trie-Bibliothek verwendet markierte Zeiger, um zwischen internen und externen Knoten im Trie zu unterscheiden. Indem Sie sicherstellen, dass neue Knoten einem bestimmten Wert zugeordnet werden, wird sichergestellt, dass einige der unteren Bits der Adresse Null sind, deren Anzahl von der gewünschten Ausrichtung abhängt. Sie können dann andere Informationen in diesen Bits speichern ... bei kritischen Knoten wird das LSB gesetzt, wenn der Knoten extern ist (ein Blatt). Denken Sie daran, die Adresse zu deaktivieren, wenn Sie sie verwenden möchten.

Es spart, eine zusätzliche Mitgliedsvariable in der Knotenstruktur zu haben.

James
quelle
Der gleiche Trick wird bei kd-Bäumen verwendet, die für das Raytracing verwendet werden - Wald et al. Richten Sie die Knoten so aus, dass die unteren beiden Bits des untergeordneten Zeigers immer Null sind, und verwenden Sie diese Bits, um die Aufteilungsebene zu speichern.