尽管内联如此大量的代码可能不是一个好主意,但我希望有一种方法可以故意内联所有指定的STL代码。例如,
#include <list>
#include <iostream>
std::list<int> list;
/* SKIPPED : INSERT RANDOM NUMBERS */
list.sort(); // forcibly inlined
for (int &num : list)
std::cout << num << std::endl;
目标是我必须消除每个可能的STL函数调用开销,无论它多么荒谬,它们的成员函数有多大或多小。所有STL源代码都可以修改。如何在gcc 6.2.0或clang 3.0中成功实现这一目标?
答案 0 :(得分:1)
默认情况下,如果任何编译单元由内联导致20%(因子1.2),gcc会限制整体增长。可以使用编译器选项
更改此设置--param inline-unit-growth=500
当允许的增长率为500%,即因子6.实际上,还有更多参数控制内联行为。您应该学习文档(或手册页)并适当地设置这些参数。其他人
--param max-inline-insns-single=number
--param max-inline-insns-auto=number