3

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

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

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

4

2 回答 2

0

至于大多数“X vs Y,哪个更快?” 问题只有一个正确的答案:

询问您的分析器。

经验模糊。人类的猜测无法考虑编译器优化的所有细节和陷阱。编译器的不同之处在于他们可以优化什么以及他们做得有多好。有时甚至在同一编译器的不同版本之间。唯一可以告诉您如何通过特定平台上特定编译器优化您的实现的是对典型问题大小的性能的正确测量。

即使有人告诉你他知道什么更快,并给你一些漂亮的图表:你能足够信任他而不这些测量吗?他知道你的具体环境是什么样的吗?他和他的图表是否考虑到你的问题的特殊极端情况?很可能不是。

于 2014-02-11T13:31:11.910 回答
-1

由于数据和钩子处于“有”关系,从设计的角度来看,我也更喜欢成员钩子。我也不认为将钩子放在基类中与将它们直接放入类之间在优化方面没有区别。

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

于 2014-02-11T13:29:44.247 回答