2014-02-11 44 views
3

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

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

有没有人有这方面的经验?任何数据,提示或引用是受欢迎的。

+0

你能提供代码示例吗? – ArmanHunanyan

+0

@ArmanHunanyan你有什么样的例子?在[boost intrusive](http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive/usage.html)中有一个很好的描述。至于我自己的代码,如果把它放在这里,它会太大而且不符合语境。 – dtldarek

+0

注意:你忘记了另一个选择=>属性'模板类IntrusiveListHook'该类应该公开暴露,并且它本身不公开公开(但其具有'模板朋友类IntrusiveList') –

回答

-1

由于数据和钩子都处于“有”关系,我也更喜欢从设计角度来看成员钩子。我也不认为把钩子放在基类中比直接把它们放到类中是有区别的。

Boost intrusive中对这些不同方法也有一些考虑。

+0

可能有在优化方面有很大不同,因为优化器可能无法看透继承层,可能会使用虚拟函数等。您无法知道优化器的功能和候选实现。 –

0

至于大多数“X与Y,什么更快?”这个问题只有一个正确答案:

问问你的分析器。

经验很模糊。人类的猜测不能考虑编译器优化的所有细节和缺陷。编译器的优化程度和优化程度有所不同。有时甚至在相同编译器的不同版本之间。唯一可以告诉你如何你的实现可以通过优化你的特定编译器在你的特定平台(s)是一个适当的性能测量与典型的问题大小。

即使如果是谁的人告诉你他知道什么是速度更快,为您提供了一些漂亮的图表:你可以信任他足够的使这些测量?他知道你的具体环境是什么样子吗?他和他的图表是否考虑到了你的问题的特殊情况?很可能不是。

+0

我会信任[[这些](http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive/performance.html))这样的测试,即使我不期望得到这样一个可理解的答案,我不完全信任的数据可能仍然有用(例如,评估潜在收益是否值得遇到麻烦)。 – dtldarek