Оптимизация времени компоновки (lto) для смешанных программ C++/C

Интересно, можно ли эффективно использовать оптимизацию времени компоновки (lto) для программ, состоящих из TU с кодом C++, вызывающим некоторую функцию в TU с кодом C. Итак, есть ли способ встроить функцию C в результирующую программу?

Реальный вариант использования — прошивка микроконтроллера, написанная на C++. Но есть фрагменты кода, которые должны быть написаны на C из-за семантики C (например, доступ к неактивному члену объединения).

(Это не имеет ничего общего с ручной маркировкой функций как встроенных)


person wimalopaan    schedule 14.11.2017    source источник
comment
Возможный дубликат оптимизация времени компоновки и встроенный   -  person Henri Menke    schedule 14.11.2017
comment
Интересно, какие режимы доступа к объединению четко определены в C, но невозможны или не определены в C++.   -  person n. 1.8e9-where's-my-share m.    schedule 14.11.2017
comment
Написание слов через доступ к неактивному члену явно поддерживается в C, но UB в C++.   -  person wimalopaan    schedule 14.11.2017
comment
Неважно, я думаю, что знаю, что вы имеете в виду, а не общую начальную последовательность.   -  person n. 1.8e9-where's-my-share m.    schedule 14.11.2017


Ответы (1)


Это вообще не должно быть проблемой. Как в GCC, так и в Clang оптимизация времени компоновки работает с промежуточным представлением кода. То есть, используя -flto, вы создаете объектные файлы с дополнительной информацией LTO (gcc) или байт-кодом LLVM (Clang), после чего исходный язык перестает иметь значение.

Некоторые доходят до того, что смешивают еще менее родственные C++ и D, но все же используют LTO: http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html

person lomereiter    schedule 14.11.2017
comment
Только что проверил это с помощью бэкэнда avr. Единственное, чего здесь не хватает, это constexpr. - person wimalopaan; 14.11.2017