gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:18:29 26 4
gpt4 key购买 nike

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 ,因此可以在任何您喜欢的地方强制内联。

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

关于c++ - 如何在STL中强制内联单个成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com