Compteur de référence d'Objective-C

C’est intéressant d’observer la runtime Objective-C. J’ai souvent jeté un coup d’œil récemment pour donner naissance à D/Objective-C et j’ai trouvé quelques points intéressants. Par exemple, savez-vous où les compteurs de référence sont stockés ?

Ils sont partagés entre huit tables de hachage globales dans Core Foundation, chaque table étant protégée par un spin lock. La table est choisie en fonction de quelque bits dans l’adresse de l’objet… Sur iOS il n’y a qu’une seule table globale. J’imagine que ce stratagème est utilisé pour éviter la contention sur les machines multi-cœur.

Ça me surprend un peu par contre qu’ils ne stockent pas simplement le compteur dans une variable de l’objet. J’imagine qu’il y a un avantage à faire comme ils font, mais ça m’échappe.

Référence : Runtime.c dans le code de Core Foundation


  • © 2003–2018 Michel Fortin.