我有一个简单的模板头,其中包含 3 个模板函数(没有声明,只有定义和标记static inline
),其中两个函数有 5000 行长。这些长函数非常简单,但是很长,因为它们是紧张的程序形式/没有循环。在我使用模板实例化的主程序文件中,如果我直接包含模板文件,则程序运行速度比我构建一个单独的 c++ 文件以包含模板并实例化它并作为链接链接到它的速度慢约 10 倍静态库(-fPIC
使用)。为什么?
是编译器太慢,指令缓存被弄乱了,编译器突然内联了不应该的长函数,还是其他什么?
代码经过高度优化,-O3 -ffast-math -march=native -std=gnu++11
在 Mac OS 10.14.3 中使用标志编译:和 GCC 5.5.0。