Скорость доступа 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) ;
}
То разницы в скорости нет. Не понимаю, откуда разница получается то.