[C++] Unterschiede zwischen seperater und gemeinsamer Übersetzung

Hallo liebes Habo,
bei mir kam gerade folgende Frage auf:
Wenn bei einem Build schlussendlich sowieso alle Objekt-Dateien zu einer statischen Binary zusammengelinkt werden, ist es dann besser die einzelnen Quellcode-Dateien seperat zu übersetzen oder gemeinsam?
Soweit ich weiß kann zumindest der GCC beim gemeinsam Übersetzen ein paar Optimierungen vornehmen, zu denen er sonst nicht in der Lage wäre. Jedes größere Build-System das ich bisher gesehen (bzw. selber zusammengeschraubt) habe hat aber eine seperate Übersetzung verwendet. Für die Vorgehensweise würde mir als Vorteil so auf die schnelle nur die Parallelisierbarkeit einfallen, sonst nichts.

Kennt jemand die tieferen Weisheiten die hier versteckt sind?

mfg benediktibk
 
RAM-Verbrauch des Compilers fällt mir spontan ein. Da gabs bei einigen Projekten afaik sogar Probleme mit 32-Bit Toolchains, ich glaub bei Firefox und Chrome(ium) war das.
 
Ich hätte eigentlich gehofft, dass da noch der eine oder andere tiefgehendere Grund kommt. Nachdem nichts kommt gehe ich mal davon aus, dass das mehr in die Kategorie "best practice" fällt.

mfg benediktibk
 
Gibt da auch nicht viele Gründe für. Parallelisierbarkeit wurde schon genannt, das mit den Limits naja und wenn die Abhängigkeiten erfüllt sind, kann man evtl. Änderungen einkompilieren, indem man nur wenige Module neu kompiliert und neu linkt.
Dank LTO macht es inzwischen ja auch keinen Unterschied mehr für die Codeerzeugung und -optimierung, ob man einzeln oder zusammen übersetzt...
 
LTO ist ein gutes Stichwort, das scheint genau die Effekte auszugleichen, die eine seperate Übersetzung als Nachteil hat. Sehe ich das richtig, dass dieses Feature beim GCC bei keinem Optimierungslevel automatisch aktiviert ist?

mfg benediktibk
 
Zurück
Oben