如何故意内联所有指定的STL代码?

时间:2017-06-16 16:40:05

标签: c++ stl inline

尽管内联如此大量的代码可能不是一个好主意,但我希望有一种方法可以故意内联所有指定的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中成功实现这一目标?

1 个答案:

答案 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