Instead of a C stack of references to the identified objects, we use a list of weakreferences referencing the identified objects.
It doesn't seem to me that the Eiffel run-time reallocates the same id's twice, even after objects have been collected. The behavior is identical here. It means there is a slow memory leak: the stack/list keeps increasing when new id's are allocated. Fortunately items are only 4-byte big.