我想知道,如果我们有以下课程:
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
),程序是跑得慢于我的预期。
简而言之,我想知道在实例化和使用具有大量非静态函数/变量的类的实例时会产生多少开销。
修改
我用我的大型类实例向量做的事情之一就是排序......这是我怀疑的主要因素是耗尽性能,因为有很多移动(以及复制,显式和隐式)元素(实例)矢量周围和之间。显然,如果必须移动和复制的数据量非常大,可能会导致性能下降。
答案 0 :(得分:4)
MyClass的每个实例都有自己的十个函数集
没有
例如,在类定义中有20个函数会影响性能,而不是拥有2个函数(非静态),特别是关于实例化,而且还有这些实例的工作?
因此,没有。
变量的数量会影响性能吗?
拥有大量成员变量的主要影响是每个实例占用大量内存空间。尺寸大的结果是它会在复制时花费大量时间。 CPU缓存中不太明显的时间开销。
但这些开销可能不是导致问题的原因。
我用我的大型类实例向量做的一件事就是排序......这是我怀疑的主要因素是耗尽性能
不要怀疑。测量。要追踪性能的来源,找出瓶颈所在。