Здесь предполагается, что компилятор не может оптимизировать функции.Это ограничение конкретных компиляторов, а не общая проблема.Использование этого в качестве общего решения для конкретной проблемы может быть плохим.Компилятор вполне может просто раздуть вашу программу тем, что могло бы быть многократно используемыми функциями по тому же адресу памяти (с использованием кеша), скомпилированным в другом месте (и потерять производительность из-за кеша).
Большие функции в целом обходятся оптимизацией, существует баланс между накладными расходами локальных переменных и количеством кода в функции.Хранение количества переменных в функции (как переданных, локальных и глобальных) в пределах количества одноразовых переменных для платформы приводит к тому, что почти все может оставаться в регистрах и не должно быть вытеснено в оперативную память, а также в стек.frame не требуется (зависит от цели), поэтому накладные расходы при вызове функции заметно сокращаются.Это трудно сделать в реальных приложениях все время, но в качестве альтернативы небольшому количеству больших функций с большим количеством локальных переменных код будет тратить значительное количество времени на удаление и загрузку регистров с переменными в / из ОЗУ (зависит отцель).
Попробуйте llvm, он может оптимизировать всю программу, а не только функцию за функцией.Выпуск 27 догнал оптимизатор gcc, по крайней мере, для одного или двух тестов, я не проводил исчерпывающего тестирования производительности.И 28 выходит, поэтому я предполагаю, что это лучше.Даже с несколькими файлами количество комбинаций регуляторов настройки слишком велико, чтобы с ними связываться.Я считаю, что лучше вообще не оптимизировать, пока не соберете всю программу в один файл, а затем выполнить оптимизацию, предоставив оптимизатору всю программу для работы, в основном то, что вы пытаетесь делать с встраиванием, но без багажа.