У меня есть простой шаблонный заголовок, содержащий 3 шаблонные функции (без объявлений, только определения и помеченные static inline
),
две из этих функций имеют длину 5000 строк. Эти длинные функции очень просты, но они длинные, потому что они находятся в форме программы stinghtline / без циклов. В моем основном программном файле, где я использую создание экземпляра шаблона, если я включаю файл шаблона напрямую, программа работает примерно в 10 раз медленнее, чем если бы я строил отдельный файл c ++, чтобы включить шаблон и создать его экземпляр, и сделать ссылку на него как статическая библиотека (-fPIC
используется). Почему?
Является ли компилятор слишком медленным, кеш инструкций запутался, компилятор неожиданно включил длинные функции, когда не должен, или что-то еще?
Код сильно оптимизирован, компилируется с флагами: -O3 -ffast-math -march=native -std=gnu++11
и GCC 5.5.0 в Mac OS 10.14.3.