C ++非静态成员函数开销

时间:2015-07-03 01:35:25

标签: c++ class optimization overhead

我想知道,如果我们有以下课程:

class MyClass  
{
public:
  MyClass(...)  
  type nonstatic_func1(...);
  type nonstatic_func2(...);
  ...
  type nonstatic_func10(...);
private:
  type var1;
  type var2;
  ...
  type var10;
};

MyClass的每个实例是否都有自己的十个函数集(即对于每个实例,是否会创建十个函数中每个函数的“版本”)?例如,类定义中的20个函数会对性能产生多大影响,而不是具有2个函数(非静态),特别是关于实例化,还有处理这些实例的情况?变量的数量会对性能产生多大影响? (见下一段,vector部分)

我问的原因是我正在编写一个实例化一个类的很多实例的程序(为了说明,我有一个很大的向量,例如vector<MyClass> vec),程序是跑得慢于我的预期。

简而言之,我想知道在实例化和使用具有大量非静态函数/变量的类的实例时会产生多少开销。

修改

我用我的大型类实例向量做的事情之一就是排序......这是我怀疑的主要因素是耗尽性能,因为有很多移动(以及复制,显式和隐式)元素(实例)矢量周围和之间。显然,如果必须移动和复制的数据量非常大,可能会导致性能下降。

1 个答案:

答案 0 :(得分:4)

  

MyClass的每个实例都有自己的十个函数集

没有

  例如,在类定义中有20个函数会影响性能,而不是拥有2个函数(非静态),特别是关于实例化,而且还有这些实例的工作?

因此,没有。

  

变量的数量会影响性能吗?

拥有大量成员变量的主要影响是每个实例占用大量内存空间。尺寸大的结果是它会在复制时花费大量时间。 CPU缓存中不太明显的时间开销。

但这些开销可能不是导致问题的原因。

  

我用我的大型类实例向量做的一件事就是排序......这是我怀疑的主要因素是耗尽性能

不要怀疑。测量。要追踪性能的来源,找出瓶颈所在。