Скорость доступа c расчетом к элементам вектора и "самописного вектора"

Подскажите пожалуйста, почему доступ к элементам класса примитивнейшего "вектора" с арифметическими вычислениями в 2-3 раза медленнее, чем к стандартному вектору ?

Вот полностью рабочий код:

#include <iostream>
#include <vector>
#include <ctime>


class my_class_vec
{

public:


    my_class_vec(size_t kol_vo)
    {
        my_size_t_p = (size_t*)malloc(kol_vo * sizeof(size_t));

        memset(my_size_t_p, 0, kol_vo);



        for (size_t i = 0; i < kol_vo; i++)
        {
            my_size_t_p[i] = i;
        }
    } 





    size_t get_element(size_t num)
    {
        return my_size_t_p[num];
    }




private:



    size_t* my_size_t_p;


};












int main()
{
    int clock1;
    int clock2;

    int num1;
    int num2;


    size_t kol_vo = 100000000;





    //------------------------------------------------------------------------------------

    std::vector<size_t>my_vector;
    my_vector.resize(kol_vo);

    for (size_t i = 0; i < kol_vo; i++)
    {

        my_vector[i] = i;

    }

    //------------------------------------------------------------------------------------
        



    //------------------------------------------------------------------------------------

    my_class_vec my_class_vector(kol_vo);

    //------------------------------------------------------------------------------------




//Вычисление скорости:


    //------------------------------------------------------------------------------------

    clock1 = clock();


    for (size_t i = 0; i < kol_vo; i++)
    {

        num1 = my_vector[i] + my_vector[i] * my_vector[i] + (my_vector[i] + i) / 5634;

    }

    clock2 = clock();
    std::cout << "vector time dostup elements:" << clock2 - clock1 << std::endl;

    //------------------------------------------------------------------------------------



    //------------------------------------------------------------------------------------

    clock1 = clock();


    for (size_t i = 0; i < kol_vo; i++)
    {

        num2 = my_class_vector.get_element(i) + my_class_vector.get_element(i) * my_class_vector.get_element(i) + (my_class_vector.get_element(i) + i) / 5634;

    }

    clock2 = clock();
    std::cout << "class_vector time dostup elements:" << clock2 - clock1 << std::endl;

    //------------------------------------------------------------------------------------


      std::cout << num1 + num2 << std::endl;
}

Причем такая разница в скорости именно, когда я выполняю умножение и деление, если просто указать к примеру:

for (size_t i = 0; i < kol_vo; i++)
{
   num2 = my_class_vector.get_element(i) ;
}

То разницы в скорости нет. Не понимаю, откуда разница получается то.


Ответы (0 шт):