创建 class 对象然后调用函数与使用带范围解析运算符的静态函数的性能差异
Performance difference of making class object then calling function vs using static function with scope resolution operator
如果这样做,是否存在性能差异(无论大小,内存和速度都会被考虑):
ClassA a;
a.functionb();
对比这个:
ClassA::functionb();
Is there a performance difference
视情况而定。如果程序是优化的,并且 class 是无状态的,如果它没有用户定义的构造函数或析构函数,并且实例具有自动存储持续时间或者是临时的,并且不涉及间接寻址 - 即所有事情都是相等 - 那么我看不出性能会有差异的原因。
您可以通过测量发现实践中是否存在显着的性能差异。
这取决于创建 class 对象的成本。
如果这个便宜,没有区别。 This example 编译为完全相同的二进制文件,因此具有相同的执行速度。
class Foo{
public:
static int bar() {return 1;}
};
class Foo2{
public:
static int bar() {return 1;}
};
int main () {
//return Foo::bar();
Foo2 foo ;
return foo.bar();
}
一般说明:如果您关心性能,首先要做的是设置时间测量并检查您的热点位置。这可以使用 perf
或 vTune
等工具来完成。确保使用编译器的高优化级别 (-O3
)。
如果这样做,是否存在性能差异(无论大小,内存和速度都会被考虑):
ClassA a;
a.functionb();
对比这个:
ClassA::functionb();
Is there a performance difference
视情况而定。如果程序是优化的,并且 class 是无状态的,如果它没有用户定义的构造函数或析构函数,并且实例具有自动存储持续时间或者是临时的,并且不涉及间接寻址 - 即所有事情都是相等 - 那么我看不出性能会有差异的原因。
您可以通过测量发现实践中是否存在显着的性能差异。
这取决于创建 class 对象的成本。
如果这个便宜,没有区别。 This example 编译为完全相同的二进制文件,因此具有相同的执行速度。
class Foo{
public:
static int bar() {return 1;}
};
class Foo2{
public:
static int bar() {return 1;}
};
int main () {
//return Foo::bar();
Foo2 foo ;
return foo.bar();
}
一般说明:如果您关心性能,首先要做的是设置时间测量并检查您的热点位置。这可以使用 perf
或 vTune
等工具来完成。确保使用编译器的高优化级别 (-O3
)。