Обновление
Чтобы явно подавить встраивание для одной функции в gcc, используйте:
void foo() __attribute__ ((noinline))
{
...
}
См. Также Как я могу сказать gcc невстроить функцию?
Подобные функции будут регулярно автоматически вставляться, если не скомпилировано -O0 (отключить оптимизацию).
В C ++ вы можете подсказывать компилятору, используя ключевое слово inline
Если компилятор не примет вашу подсказку, вы, вероятно, используете слишком много регистров / ветвей внутри функции.Ситуация почти наверняка разрешается путем извлечения «сложного» блока в его собственную функцию.
Обновление Я заметил, что вы добавили тот факт, что они являются внешними символами.(Пожалуйста, обновите вопрос этой важной информацией).Ну, в некотором смысле, с внешними функциями все ставки выключены.Я не могу поверить, что gcc по определению встроит всю сложную функцию в крошечную функцию , просто , потому что она вызывается только оттуда.Возможно, вы можете дать пример кода, который демонстрирует поведение, и мы можем найти подходящие флаги оптимизации, чтобы исправить это?
Также , это C или C ++?В C ++ я знаю, что обычным делом является включение встроенных тривиальных функций принятия решений (в основном в качестве членов, определенных в объявлении класса).Это не приведет к конфликту связей, как с простыми (внешними) функциями Си.
Также вы можете иметь определенные функции шаблонов, которые будут идеально встроены во все модули компиляции, не приводя к конфликтам ссылок.
Я надеюсь, что вы используете C ++, потому что он даст вам массу вариантов здесь.