Actually in 2019 on a Desktop PC the whole number of process is around 200
But all objects are not referenced by use case => Says 10% are by UC
12 bits => 205 times the actual usage
11 bits => 102 times the actual usage
Object references
Typically there are at maximum some tens of references between objects: says 30
12 bits => 137 times the actual usage
11 bits => 68 times the actual usage
Exception: Singleton have many many objects that references them.
Conclusions
These sizes should support efficiently the very large majority of the cases.
The more pertinent is to have 11 bits for UC count and 12 for Object count.
A solution have to be found in case of overflow, in particular for the Singleton case.
Solution for overflow
If a reference counter reach 4095 (or 2047), then a new secondary smart pointer is allocated referenced by the first smart pointer
the secondary smart pointer continue counting on the overflow counter but on the full 24 bits => 16 777 215 rooms.
This mechanism applies recurring to allow as needed references.
The reference counts is the sum of each smart pointer chain counters.
If both counters are in overflow, the pair (in the chain order) counter are for use case and the impair for object reference count.