Ich denke, bestimmte Sprach-Features wie in diesem Fall Generics bringen naturgemäß einen gewissen Overhead mit sich. Dass die Binaries dann größer werden versteht sich irgendwie von selbst.
Nö, nur wenn sie eben so implementiert sind, wie in Delphi, als Templates. Dann wird für jede TList<T> eine Kopie gemacht und T entsprechend ersetzt, durch string, Integer, TFoo, TBar, was auch immer. Dumm nur, dass zumindest für alle möglichen Klassen der interne Code für diese Klasse identisch ist. Ob ich nun eine TFoo oder eine TBar Instanz hinzufüge, der ausgeführte Code ist immer der gleiche. Solang also nichts mit T direkt gemacht wird (z.B. T.Create oder TypeInfo(T) etc) könnte der Linker den Code zusammenführen, so dass nicht für TList<TFoo> und TList<TBar> der identische Code zweimal in der Binary steht (siehe für mehr Infos dazu
diesen Blog Artikel).
Das wurde auch schon experimentell mal von Commmunity Membern gemacht, was doch einiges an Ersparnis in einer Anwendung brachte.