Michel Fortin Here

Weblog on Saturday June 18, 2011

Objective-C reference counters

It’s interesting to look at the Objective-C runtime. I’ve been doing that a lot recently to bring D/Objective-C to life and found a couple of interesting things. For instance, do you know where the reference counts are stored?

They’re split between eight global hash tables in Core Foundation, each table protected by its own spin lock. The table is chosen according to a few bits in the object’s address… On iOS there’s only one global hash table. I guess all this is to avoid contention on multi-core machines. It’s still unexpected they don’t store the counter as a variable within the object itself.

I find it unexpected however that they’re not simply storing the reference counter directly as a variable inside the object. I guess there’s an advantage to gain by doing things like they do, but I don’t see it.

Reference: Runtime.c in Core Foundation’s internals

Discussion & Comments

Also see the French discussion about this entry.

Discussion is now closed for this entry. Feel free to contact me if you have something interesting to say.