Quais são os casos de uso da vida real para ponteiros marcados? [fechadas]

8

Quais são os casos de uso da vida real para ponteiros marcados?

Isso se deve principalmente à leitura de pequenos sistemas de 64 bits e aos possíveis usos de ponteiros de palavras de 64 bits .

Para meu entendimento, ponteiros marcados são endereços que podem conter informações extras em bits devido ao possível espaço de endereço nessa arquitetura específica, que é muito menor.

Mas então, é possível usar ponteiros marcados além de casos triviais? Alguma idéia legal / exemplos?

Existem bibliotecas populares, estruturas que aproveitam os ponteiros de 64 bits por meio de ponteiros com tags? Isso é possível em todos os hardwares?

auselen
fonte
5
Lisps freqüentemente usam ponteiros marcados para alternar perfeitamente entre números inteiros e bignums. Com uma tag, o endereço é interpretado como int e com outra tag, como ponteiro para um bignum.
Patrick
2
Alguns usos reais de ponteiros marcados: * O tempo de execução Objective-C no Mac OS X 10.7 - mikeash.com/pyblog/… * O tempo de execução Objective-C no iOS 7 no ARM64 - mikeash.com/pyblog/friday-qa-2013- 09-27-arm64-and-you.html
ninguém
é claro que um voto negativo ... de novo ... sem nenhum comentário.
auselen
1
Esta questão parece estar fora do tópico, porque é uma pergunta baseada em pesquisa. Nenhum critério foi fornecido para fazer com que uma resposta específica se destaque mais do que qualquer outra resposta.
Portanto, não se trata de "conceitos de estrutura de dados"? ( Programmers.stackexchange.com/help/on-topic ) hmm ...
auselen

Respostas:

4

A biblioteca critbit trie usa ponteiros marcados para diferenciar nós internos e externos na trie. Ao garantir que novos nós sejam alocados alinhados a um determinado valor, você garante que alguns dos bits mais baixos do endereço sejam zero, cujo número depende do alinhamento necessário. Você pode armazenar outras informações nesses bits ... no caso de nós críticos, o LSB é definido se o nó for externo (uma folha). Lembre-se de desmarcar o endereço se você pretende usá-lo.

Economiza ter uma variável de membro extra na estrutura do nó.

James
fonte
O mesmo truque é usado em árvores kd usadas para traçar raios - Wald et al. alinhe os nós de modo que os dois bits inferiores do ponteiro filho sejam sempre zero e use esses bits para armazenar o plano de divisão.