优化性能,同时减少模板的使用
optimizing performance while reducing use of template
在我的应用程序中,通过为结构引入特殊情况,我获得了大约2x的速度提升。
简化后的代码是这样的:class SpecialCase
{
private:
size_t values[10];
public:
void foo();
};
class GenericCase
{
private:
std::vector<size_t> values;
public:
void foo();
};
template <class Case> void bar()
{
Case case;
case.foo();
}
void somewhereElse()
{
if ( boring_runtime_condition )
{
bar<SpecialCase>();
}
else
{
bar<GenericCase>();
}
}
这段代码没有问题,但现在我必须通过另一个类扩展应用程序:
class Problem
{
private:
std::vector<Case> cases;
public:
Case doSomething();
};
要同时处理SpecialCase和GenericCase,我必须使整个类成为模板。由于我有几个特殊的情况,这大大减慢了编译速度。我一点也不喜欢。
在运行应用程序时,我从不混合使用SpecialCase和GenericCase。我非常希望不必在每个方法中将Case强制转换为特定类型,因为这会使代码膨胀,其他开发人员可能会忘记它。是否有一个好的方法来避免这种模板疯狂?(也欢迎c++ 11解决方案)
免责声明:请不要告诉我std::vector
有多好,我不应该使用特殊情况。我测量了性能,所以请不要留言说你不相信2倍的加速。
如果您不想创建大量的std::vector
实例,您可以创建一个小的代理类,它通过引用存储所有内容,并仅在该类中强制转换。如果它很小,实例化不会太慢。
template<class T>
class Problem {
private:
std::vector< some_smart_pointer > cases;
public:
T cast(Case* x) {
return (T*)x;
}
T doSomething() {
//doing something
return cast(returnValue);
}
};
我将类命名为Problem
,但最好将其他层ProxyVector
仅用作代理并在Problem
中使用
相关文章:
- 面向数据的设计;如何在 C++ 中优化数据结构以提高性能?
- C++分离功能,实现性能优化
- C++14 通过引用返回一个值以优化性能
- 优化时间性能Unordered_map C
- 从编译器优化和代码性能的角度来看,"if constexpr"与"if"
- C++按字符串调用函数,比较PHP的性能,如何在C++中优化代码
- 尾部调用优化似乎略微降低了性能
- C++优化级别是否会影响Swig Python模块的性能
- 如何优化C 对象I/O操作的性能
- 对于高度优化的矩阵多应用程序代码,MSVC和GCC之间的性能差异
- 为什么asm中的这种差异对性能很重要(在未优化的ptr++与++ptr循环中)
- 内存对齐优化不仅性能,而且内存大小
- 使用 CUDA 中的不同块和线程进行性能优化
- FAT,在检索文件时优化性能
- 用于优化性能的C++虚拟机
- 优化与零的简单比较以提高性能
- 用于循环性能差异和编译器优化
- QTableWidget性能优化
- 优化栈遍历性能
- 优化性能,同时减少模板的使用