Они работают с разными объектными файлами?
Они работают в разных библиотеках?
Я знаю, что это зависит от компилятора. Мне любопытно, есть ли какие-нибудь компиляторы и настройки оптимизации, которые сделают эту работу.
Обычно да, но в принципе, используя Link-Time-Optimization (-flto
для компиляторов и компоновщиков GCC / Clang) или Link-Time-Code-Generation (/LTCG
а также /GL
для компилятора и компоновщика MSVC) компилятор и компоновщик могут использовать свои общие знания и, возможно, встроенный код и элидные копии. ССЗ руководство состояния:
[…] это заставляет весь межпроцедурный анализ и оптимизацию в GCC работать с двумя файлами, как если бы они были одним. Это означает, например, что инлайнер может встроить функции в bar.o в функции в foo.o и наоборот.
Обратите внимание, что это не будет работать с DLL, потому что код общей библиотеки исправлен и уже полностью скомпилирован.
RVO нужна только информация о самой функции (так как она создает возвращаемое значение функции вместо копирования / перемещения по ней). return
, Это, вероятно, будет работать без параметров aboce.