Question

pointeurs Tagged sont une optimisation commune mise en œuvre des langues dynamiques: prendre avantage des exigences d'alignement qui comptent le plus bas depuis deux ou trois bits d'un pointeur sera toujours égale à zéro, et les utiliser pour des informations de type de magasin

.

Supposons que vous utilisez le garbage collector Boehm, qui travaille essentiellement en examinant les données actives pour des choses qui ressemblent à des pointeurs. pointeurs Tagged ne ressemblent pas à des pointeurs, dans le sens que leurs bits faibles sont non nulles.

Est-ce un Showstopper, à savoir que vous avez à fossé des pointeurs si vous tagué utilisez Boehm? Ou at-il un moyen de contourner ce problème?

Était-ce utile?

La solution

AFAIK Boehm peut gérer cela avec les bonnes options. Il est capable, à un petit prix, de la détection des pointeurs intérieurs. Il est également possible d'écrire votre propre code de balayage. Fondamentalement, il y a des crochets probablement assez pour gérer à peu près tout.

J'ai écrit mon propre collecteur, il est précis sur le tas et conservateur sur la pile. Il ne touche pas C fait des pointeurs. Pour certaines applications, il sera plus rapide car il sait beaucoup de choses sur mes objets attribués langue et ne se soucie pas d'autres choses qui est géré, par exemple, en utilisant Destructeurs C ++ traditionnels.

Cependant, il n'est pas incrémentiel ou générationnelle, et il ne gère pas les threads aussi bien (il est pas assez intelligent pour threads d'arrêt avec des signaux). Du côté positif, cependant, il ne nécessite pas de techniques de liaison magiques qui Boehm fait (à mallocs de capture, etc.). Au moins au sérieux côté, vous ne pouvez pas mettre des objets gérés dans les non gérés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top