将对象字段的值放在变量中的性能

时间:2014-11-04 14:29:27

标签: c++ class object field

以下是c ++中的两个代码段:

some_previously_defined_array_object_class object1;

int nrows = object1.rows;
int ncols = object1.cols;
int objectsize = object1.size();

int some_metric1;
int some_metirc2;

some_metric1 = nrows*ncols+2/(3+ncols);
some_metric2 = objectsize+0.5*ncols;
// Other computations involving the previous int

我应该直接使用object1.rows(还有其他的吗?)

而不是定义一些包含我对象字段值的int。

除了我认为在一个地方更改int的值更容易之外,起初我认为将值放在int中而不是每次都访问字段会更有效。现在,我完全不确定这是roes和cols的情况。

另一方面,对于" object.size()",因为它是一个函数并且该值不太可能经常改变,所以计算它并使用它是一个安全的赌注每个程序的其余部分的int而不是每次计算?好的,在这种情况下,我可以创建一个字段" size = rows * cols"在我的班上,但这只是一个简单的例子。

那么,对此有何想法?

2 个答案:

答案 0 :(得分:0)

最好以您展示的方式进行,使用临时变量来提高可读性并简化输入。这是一种非常常见的情况,编译器会为您优化它。

答案 1 :(得分:0)

由于object1是一个局部变量,因此堆栈上已经为object1.rowsobject1.cols保留了空间;在堆栈上创建更多变量以保持相同的值不会带来任何性能优势,并且可能确实会导致性能惩罚,具体取决于具体情况。

在任何一种情况下,性能差异都可以忽略不计。但是,我会避免仅仅因为清洁和风格而创建额外的局部变量。

object1.size()案例中,如果您多次使用objectsize的值,则可能会看到性能提升。如果您只运行这些计算几次,那么性能差异将可以忽略不计。 (如果编译器可以看到size()的实现并且它被声明为const,那么无论如何它都可以优化掉size()的多个调用!)