【发布时间】:2011-06-08 17:33:37
【问题描述】:
我有一段性能至关重要的代码,我正在考虑使用 CRTP。我的问题是大多数编译器能够在多大程度上优化代码。特别是我想知道编译器是否可以内联(在适当的时候)方法。例如,在以下代码中:
template <class Derived>
struct Base
{
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
};
struct Derived : Base<Derived>
{
void implementation();
};
调用object.interface() 会产生与调用object.implementation() 相同的性能
【问题讨论】:
-
性能问题在这里真的毫无意义。如果这对您很重要,请检查编译器的汇编器输出 - 编译器可以有效地内联(或不内联)他们喜欢的内容。
-
@Neil Butterworth:我大体上同意你的观点,除了涉及没有多个实现或良好优化器的特定算法或语言的性能问题是相当合理的。例如,我得到了一些关于 CPython 性能问题的优秀答案,我也看到了一些关于算法性能的好问题。
-
@Omnif 算法没有性能——它们的实现有。到那时,我们又回到了特定于实现的问题(算法、其使用和编译器/语言系统)。
-
@Neil Butterworth:如果是这样,那么 O 符号的意义何在?
-
@Omnif O 表示法没有说明性能,只有复杂性。提供一个比 O(N) 慢的 O(1) 算法的实现是微不足道的。
标签: c++ compiler-optimization crtp