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

C++ Non-static member functions overhead

本文关键字:开销 函数 静态成员 C++      更新时间:2023-10-16

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

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缓存。

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

我对类实例的大向量所做的一件事是排序。。。我怀疑这是性能下降的主要原因

不要怀疑。测量要跟踪性能的发展,请找出瓶颈所在。