如何在STL中强制内联单个成员函数?

How to forcibly inline a single member function in STL?

perf record 进行分析后,它表明 std::__detail::_List_node_base::_M_transfer 在对 std::list 类型的列表进行排序时花费了大量时间。所以,我在想强行内联这样的成员函数是否会提高整体性能。

这就是我所做的;更改 bits/stl_list.h

中的声明和实现
void
_M_transfer(_List_node_base* const __first,
            _List_node_base* const __last) _GLIBCXX_USE_NOEXCEPT;

void
_M_transfer(iterator __position, iterator __first, iterator __last)
{ __position._M_node->_M_transfer(__first._M_node, __last._M_node); }

进入

inline void
_M_transfer(_List_node_base* const __first,
            _List_node_base* const __last) _GLIBCXX_USE_NOEXCEPT __attribute__((always_inline));

inline void
_M_transfer(iterator __position, iterator __first, iterator __last) __attribute__((always_inline))
{ __position._M_node->_M_transfer(__first._M_node, __last._M_node); }

但是,g++-6编译失败,错误信息如下:

error: inlining failed in call to always_inline ‘void std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*) noexcept’: function body not available

如何在STL中正确强制内联单个成员函数?

尝试boost::container::list

它是header-only,所以在任何你喜欢的地方放置force是没有问题的。

无论如何,当你需要性能时,list 并不是你选择的容器。