¿Cuáles son los casos de uso de la vida real para punteros etiquetados? [cerrado]

8

¿Cuáles son los casos de uso de la vida real para punteros etiquetados?

Esto proviene principalmente de la lectura sobre pequeños sistemas de 64 bits y posibles usos de punteros de palabras de 64 bits .

Según tengo entendido, los punteros etiquetados son direcciones que pueden contener información adicional en bits debido al posible espacio de direcciones en esa arquitectura particular que es mucho más pequeña.

Pero entonces, ¿es posible usar punteros etiquetados más allá de los casos triviales? ¿Alguna idea genial / ejemplos?

¿Existen bibliotecas populares, marcos que aprovechan los punteros de 64 bits a través de punteros etiquetados? ¿Es eso posible en cada hardware?

Auselen
fuente
55
Lisps utiliza con frecuencia punteros etiquetados para cambiar sin problemas entre enteros y bignums. Con una etiqueta, la dirección se interpreta como int y con otra etiqueta se interpreta como un puntero a un bignum.
Patrick
2
Algunos usos reales de punteros etiquetados: * El tiempo de ejecución de Objective-C en Mac OS X 10.7 - mikeash.com/pyblog/… * El tiempo de ejecución de Objective-C en iOS 7 en ARM64 - mikeash.com/pyblog/friday-qa-2013- 09-27-arm64-and-you.html
nadie el
por supuesto un voto negativo ... otra vez ... sin ningún comentario.
auselen
1
Esta pregunta parece estar fuera de tema porque es una pregunta basada en encuestas. No se han proporcionado criterios para que una respuesta en particular se destaque más que cualquier otra respuesta.
¿Entonces no se trata de "conceptos de estructura de datos"? ( programmers.stackexchange.com/help/on-topic ) hmm ...
auselen

Respuestas:

4

La biblioteca critbit trie utiliza punteros etiquetados para diferenciar entre nodos internos y externos en el trie. Al asegurarse de que los nuevos nodos se asignen alineados a un determinado valor, se garantiza que algunos de los bits más bajos de la dirección son cero, cuyo número depende de la alineación que necesite. Luego puede almacenar otra información en estos bits ... en el caso de los nodos críticos, el LSB se establece si el nodo es externo (una hoja). Solo recuerde desetiquetar la dirección si tiene la intención de usarla.

Ahorra tener una variable miembro adicional en la estructura del nodo.

James
fuente
El mismo truco se utiliza en los árboles kd utilizados para el trazado de rayos: Wald et al. alinee los nodos de modo que los dos bits inferiores del puntero secundario siempre sean cero y use esos bits para almacenar el plano de división.