всегда встроенные функции в разных .so

В Linux, используя gcc если я объявлю функцию в динамической библиотеке как __attribute__((always_inline)) и затем я динамически загружаю эту библиотеку, будет ли функция встроена динамическим компоновщиком?

Я собираю динамические библиотеки, в -O3 и не передавая никаких флагов оптимизации времени ссылки -flto

Реальный вопрос: стоит ли объявлять функцию как всегда встроенную в динамической библиотеке, когда она вызывается в большинстве случаев из другой библиотеки?

1

Решение

Динамический компоновщик glibc не встроит никаких функций, найденных в загружаемых им объектах.

Однако, если вы объявите и определить always_inline функция в заголовочном файле, компилятор встроит эту функцию, даже если в DSO есть реализация. Это имеет два последствия:

  • Вы получаете преимущество в скорости от врезки.

  • Вся информация в определении функции была скомпилирована в вызывающую сторону, поэтому может оказаться невозможным заменить DSO другой реализацией.

Другими словами, это, вероятно, немного быстрее, но обеспечить совместимость с ABI неожиданно намного сложнее.

То, стоит ли это делать, зависит от требований к производительности и ожидаемых изменений в библиотеке.

3

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

Других решений пока нет …

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