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缓存。
但这些开销可能不是你问题的原因。
我对类实例的大向量所做的一件事是排序。。。我怀疑这是性能下降的主要原因
不要怀疑。测量要跟踪性能的发展,请找出瓶颈所在。
相关文章:
- 类型擦除的std::function与虚拟函数调用的开销
- 在编译时评估函数开销的通用方法
- 在循环中调用同一虚函数的开销
- 使用静态成员函数而不是普通函数是否有任何开销?
- 使用递归模板函数是否会引入函数调用开销,或者编译器是否大部分时间都内联它(下面的示例)?
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- 减少非静态成员函数开销
- 如何最大限度地减少使用标量 SIMD 内部函数的 SIMD 注册表的双重负载开销
- 函数调用在C++中有明显的开销吗
- 快速交叉乘积.函数调用开销
- 为什么异常总是在具有可破坏堆栈对象的非叶函数中产生开销
- 每次调用负0.6ns的虚拟函数开销
- 最小化函数选择和函数调用开销
- 调用链函数是否会产生开销
- C++:如果所有数据可能都已有效,则在构造函数中进行验证是否有开销
- boost::lock_guard分配、构造函数和析构函数开销
- 确定性时的虚函数开销 (C++)
- 虚拟函数及其开销
- 与将标准作为模板参数传递给sort()相比,将标准函数指针传递给qsort()的开销更小
- 进程中函数调用的开销