Was bei den Generics ausfällt, ist daß der Code in der
Unit ist, wo der generische Typ entgültig definiert wurde und mir scheint es manchmal auch so, als wenn er dann bei mehreren Units auch mehrmals einkompiliert wird.
Ist eigentlich logisch.
Der Compiler nimmt den Code des Generic als Vorlage und erzeugt on-the-fly neuen Sourcecode wobei der aktuelle Datentyp eingefügt wurde.
Dieser generierte Sourcecode wird natürlich in die
Unit eingefügt in der auch das Generic mit dem Datentyp zum ersten Mal aufgetaucht ist.
Zur Laufzeit werden dann noch
RTTI Daten erzeugt (bei normalen Klassen geschieht dies zur Compile-time).
Zum Sourcecode des Generics selbst gibt es keinen compilierten Objektcode weil das Generic ja nur eine Schablone ist.
Wenn das Generic + Datentyp(en) nur im Abschnitt
implementation auftaucht dann weiss der Linker nicht dass es dieses konkrete Generic schon gibt.
Und so kommt es, dass genau der gleiche Code in mehreren Units stecken kann ohne dass der Linker diese Duplikate zu einem zusammenführen kann.