Работают ли RVO и copy elision только в одном модуле компиляции или нет?

Они работают с разными объектными файлами?
Они работают в разных библиотеках?

Я знаю, что это зависит от компилятора. Мне любопытно, есть ли какие-нибудь компиляторы и настройки оптимизации, которые сделают эту работу.

5

Решение

Обычно да, но в принципе, используя Link-Time-Optimization (-flto для компиляторов и компоновщиков GCC / Clang) или Link-Time-Code-Generation (/LTCG а также /GL для компилятора и компоновщика MSVC) компилятор и компоновщик могут использовать свои общие знания и, возможно, встроенный код и элидные копии. ССЗ руководство состояния:

[…] это заставляет весь межпроцедурный анализ и оптимизацию в GCC работать с двумя файлами, как если бы они были одним. Это означает, например, что инлайнер может встроить функции в bar.o в функции в foo.o и наоборот.

Обратите внимание, что это не будет работать с DLL, потому что код общей библиотеки исправлен и уже полностью скомпилирован.

RVO нужна только информация о самой функции (так как она создает возвращаемое значение функции вместо копирования / перемещения по ней). return, Это, вероятно, будет работать без параметров aboce.

2

Другие решения


По вопросам рекламы [email protected]