繁体   English   中英

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

[英]C++ Non-static member functions 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 ),并且该程序的运行速度比我预料到了。

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

编辑

我用大量的类实例向量做的一件事是排序...这是我怀疑会浪费性能的主要内容,因为在元素之间和之间有很多移动(显式和隐式地复制)元素(实例)向量。 显然,如果必须大量移动和复制的数据块很大,则可能会降低性能。

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

没有。

在类定义中拥有20个函数(相对于拥有2个函数(非静态)),特别是在实例化方面,以及在处理这些实例时,将对性能产生多少影响?

因此,没有。

多少变量会影响性能?

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

但是这些开销可能不是造成问题的原因。

我用大量的类实例向量做的一件事是排序...这是我怀疑会降低性能的主要内容

不要怀疑 测量。 要跟踪性能在哪里,找出瓶颈在哪里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM