Новая опция в GCC 5.3: -fno-semantic-interposition

GCC 5.3 добавил новую опцию: -fno-semantic-interposition

Новая опция -fno-semantic-interposition может быть использована для улучшения кода
качество разделяемых библиотек, где расположение экспортируемых символов
не положено.

Это звучит так, как будто это что-то полезное для проектов C ++, где нельзя использовать взаимозаменяемость по какой-либо причине, но где латентность является проблемой.

Однако описание довольно расплывчато. Кто-нибудь может уточнить, как именно работает эта опция?

7

Решение

-fno-semantic-interposition может значительно улучшить производительность кода в разделяемых библиотеках, но редко может изменить семантику.

По умолчанию компилятор соблюдает Семантика вставки функции ELF. Короче говоря, любая экспортируемая функция (т.е. любая функция, если она скомпилирована с флагами компилятора по умолчанию) может быть заменена во время выполнения с помощью LD_PRELOAD или просто разделяемой библиотекой, которая раньше загружалась динамическим компоновщиком. Это препятствует тому, чтобы компилятор сделал много полезных анализов и оптимизаций (особенно встраивание и клонирование), потому что они могут нарушить взаимное расположение.

-fno-semantic-interposition дает компилятору разрешение игнорировать потенциальную вставку и оптимизировать его более агрессивно.

Как я уже сказал, при использовании -fno-semantic-interposition:

  • это может изменить поведение вашей программы (когда она фактически полагалась на вставку, иногда без вашего понимания)
  • это может принести пользу только общим библиотекам
  • это гораздо менее полезно, если вы уже выполняете надлежащую оптимизацию своих библиотек (т.е. -fvisibility=hidden и явно аннотировать все экспортируемые символы с __attribute__((visibility("default"))))

Первый пункт препятствует широкому распространению fno-semantic-interposition, Например. Насколько мне известно, ни один Linux дистрибутив не использует его в широких масштабах (кстати, это был бы отличный проект).

1

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

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

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