c++performancecompiler-optimizationstdvectorloop-invariant

Is calling std::vector::size() as fast as reading a variable?


I have do an extensive calculation on a big vector of integers. The vector size is not changed during the calculation. The size of the vector is frequently accessed by the code. What is faster in general:

I know that compilers usually inline the size() function when setting the proper compiler flags, however, this is not guaranteed.


Solution

  • Interesting question.

    So, what's going to happened ? Well if you debug with gdb you'll see something like 3 member variables (names are not accurate):

    The implementation of vector<T,Alloc>::size() is thus usually reduced to:

    return _M_end - _M_begin;  // Note: _Mylast - _Myfirst in VC 2008
    

    Now, there are 2 things to consider when regarding the actual optimizations possible:

    In other words:

    It's a micro-optimization. In general, it will be unnoticeable, either because the performance does not matter or because the compiler will perform it regardless. In a critical loop where the compiler does not apply the optimization, it can be a significant improvement.