Может ли GCC встроить функции из статических библиотек? - PullRequest
1 голос
/ 10 мая 2019

Я делаю библиотеку, которая извлечет большую пользу из встроенных функций, но она довольно большая, и я решил скомпилировать ее в статическую библиотеку вместо просто скомпилированного заголовка.В коде, использующем библиотеку, как я могу заставить GCC встроить код (вставить вызывающий код вместо его связывания и вызова) из статической библиотеки (и это даже возможно)?

1 Ответ

3 голосов
/ 10 мая 2019

Да, современные наборы инструментов C ++ способны встроить функции, даже если они не являются встроенными функциями (и их определение не известно в модуле перевода, где происходит вызов), при сборке с включенной оптимизацией во время соединения.В GCC вы можете включить LTO с помощью опции -flto.По сути, они обычно работают так, что компилятор, компилируя ваш исходный код, не только напрямую генерирует объектный код, но и записывает свое внутреннее представление вашего кода в объектный файл.При связывании, вместо простого связывания объектного кода, компилятор в основном повторно запускает генерацию кода из этого внутреннего представления для всей программы, как если бы он был записан в одном большом исходном файле.Это может значительно увеличить время, необходимое для создания вашей программы.Но это позволяет выполнять некоторые важные оптимизации, такие как встраивание, даже через границы единиц перевода…

Статические библиотеки - это просто архивы объектных файлов, поэтому, если вы собираете свою библиотеку с включенным LTO и связываете свой вызывающий код с ней,Компилятор сможет встроить функции прямо в вызывающий код.Обратите внимание, что, в конце концов, компилятор все еще должен решить, будет ли он встроенным или нет, поэтому нет никаких гарантий, что функция будет встроена наверняка…

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...