Warum kann ein Linker keine gleichen Template-Instantiierungen zusammenlinken?



  • So, da bin ich schon wieder 😉

    Ich wusste nicht genau, ob ich das ins C++-Forum posten soll, aber ich poste es jetzt einfach mal hier. Die Frage ist eigentlich relativ einfach. Warum schreibt keiner einen Linker, dem man sagen kann, dass er eine bestimmte Funktion/einen Codeabschnitt nur einmal in eine ausführbare Datei linken soll, falls es den Prozedureinsprungspunkt / das Label mehrmals mit gleichem Namen gibt. Die Codes müssten dann halt identisch sein oder so etwas ähnliches, damit er sich entscheiden kann.
    Mit so etwas könnte man sich dann z.B. per Template eine eindeutige Typ-ID zur Laufzeit für jeden Typ generieren lassen, wodurch man sich RTTI in einigen Fällen sparen könnte. Außerdem wäre die generierte Binary wahrscheinlich kleiner. Template-Klassen/-Funktionen könnten globale static-Variablen haben.
    Das ist ja dann so etwas wie bei den Linkern (meine gehört zu haben, dass es so etwas kommerziell gibt, bin mir aber unsicher), die nicht aufgerufene Funktionen nicht in die Binary linken.

    mfg



  • Hast Du "Whole Programm Optimization" aktiviert?



  • Wo?



  • MS VC++: Project| xxx Properties| Configuration Properties| General| Whole Programm Optimization: Use Link Time Code Generation



  • Jochen Kalmbach schrieb:

    MS VC++: Project| xxx Properties| Configuration Properties| General| Whole Programm Optimization: Use Link Time Code Generation

    Tja... MinGW 😃



  • Oh, ich habe gerade festgestellt, dass static-Variablen in Template-Funktionen doch global gültig sind... wie ham se das nur angestellt? 👍


Anmelden zum Antworten