侵入式数据结构中的成员钩子与基本钩子

时间:2014-02-11 13:19:30

标签: c++ performance templates inlining intrusive-containers

我正在编写一个侵入式数据结构,并想知道是否使用基本或成员挂钩。由于代码将被多次调用,我的问题是关于性能以及编译器能够在多大程度上内联这些代码。

基本挂钩基于继承,而成员挂钩通过模板参数使用指向成员的指针。 我的设计选择是使用成员钩子,但我的经验表明,指针比静态代码更难优化。另一方面,所有这些指针在编译时都是已知的,也许编译器可以做一些魔术来分析正在发生的事情。

有没有人有这方面的经验?欢迎任何数据,提示或参考。

2 个答案:

答案 0 :(得分:0)

至于大多数“X vs Y,什么更快?”问题只有一个适当的答案:

询问您的探查者。

经验含糊不清。人类的猜测不能考虑编译器优化的所有细节和陷阱。编译器在优化和优化方面有所不同。有时甚至在同一编译器的不同版本之间。唯一可以告诉您如何通过 特定平台上的特定编译器优化您的实现的方法是通过典型的问题规模对性能进行适当的测量。

即使如果有人告诉你他知道什么更快并且给你一些漂亮的图表:你能相信他足够进行那些测量吗?他知道你的具体环境是什么样的吗?他和他的图表是否考虑到了问题的特殊情况?很可能不是。

答案 1 :(得分:-1)

由于数据和钩子处于“有一个”关系中,我从设计的角度来看也更喜欢成员钩子。我也认为将钩子放在基类中而不是直接将它们放入类中的优化存在差异。

Boost intrusive中还有一些关于这些不同方法的考虑因素。