Arbeiten sie über verschiedene Objektdateien hinweg? Arbeiten sie über verschiedene DLLs hinweg?
Ich weiß, dass dies vom Compiler abhängt. Mich interessiert, ob es Compiler und Optimierungseinstellungen gibt, die dies ermöglichen.
Arbeiten sie über verschiedene Objektdateien hinweg? Arbeiten sie über verschiedene DLLs hinweg?
Ich weiß, dass dies vom Compiler abhängt. Mich interessiert, ob es Compiler und Optimierungseinstellungen gibt, die dies ermöglichen.
Normalerweise ja, aber grundsätzlich können der Compiler und der Linker mit Link-Time-Optimierung (-flto
für GCC/Clang Compiler und Linker) oder Link-Time-Code-Generation (/LTCG
und /GL
für den MSVC Compiler und Linker) ihr gemeinsames Wissen nutzen und möglicherweise Code inline einfügen und Kopien vermeiden. Das Handbuch von GCC besagt:
[...] dadurch werden alle interprozeduralen Analysen und Optimierungen in GCC über die beiden Dateien hinweg ausgeführt, als wären sie eine einzige. Das bedeutet beispielsweise, dass der Inliner Funktionen in bar.o in Funktionen in foo.o inline einfügen kann und umgekehrt.
Beachten Sie, dass dies nicht mit DLLs funktioniert, da der Code einer Shared Library fest ist und bereits vollständig kompiliert wurde.
RVO benötigt nur Informationen über die Funktion selbst (da sie den Rückgabewert der Funktion vor Ort konstruiert, anstatt beim return
zu kopieren/verschieben. Dies wird wahrscheinlich auch ohne die obigen Optionen funktionieren.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.