Почему код реализации вектора работает медленнее, стандартного std::vector
Подскажите пожалуйста, а почему первый код работает быстрее второго ?
30 мс против 140 мс.
Запускал в release в VS2019. и на x32 и x64.
1)То есть я просто создаю вектор int и в цикле обращаюсь к его элементам:
#include <iostream>
#include <chrono>
#include <string>
#include <vector>
int main()
{
std::chrono::time_point<std::chrono::steady_clock> start;
std::chrono::time_point<std::chrono::steady_clock> end;
unsigned long long result_ns;
std::vector<int>my_vector;
my_vector.resize(99999999);
int my_int;
start = std::chrono::steady_clock::now();
//---------------------------------------
for (int i = 0; i < 99999999;i++)
{
my_int = my_vector[i] + my_vector[i];
}
//---------------------------------------
end = std::chrono::steady_clock::now();
std::cout << my_int << std::endl; //Для того, чтобы компилятор не с оптимизировал цикл.
result_ns = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
std::cout << "time1:"<<result_ns << std::endl; //Выводим время работы цикла
}
2)То же самое, что и в п.1, но только через создание самого примитивного класса, который выделяет память под int и позволяет обращаться к его элементам:
#include <iostream>
#include <chrono>
#include <string>
#include <vector>
class my_class
{
public:
int my_get_value(int i)
{
return my_char_p[i];
}
void my_resize(int y)
{
my_char_p = (int*)malloc(y*sizeof(int));
}
private:
int* my_char_p;
};
int main()
{
std::chrono::time_point<std::chrono::steady_clock> start;
std::chrono::time_point<std::chrono::steady_clock> end;
unsigned long long result_ns;
my_class my_class_vector;
my_class_vector.my_resize(99999999);
int my_int1;
start = std::chrono::steady_clock::now();
//---------------------------------------
for (int i = 0; i < 99999999; i++)
{
my_int1 = my_class_vector.my_get_value(i) + my_class_vector.my_get_value(i);
}
//---------------------------------------
end = std::chrono::steady_clock::now();
std::cout << my_int1 << std::endl;
result_ns = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); //результат в нано секундах
std::cout << "time1:" << result_ns << std::endl;
}
Почему в стандартном std::vector - это происходит в разы быстрее, чем в условно реализованном буквально из пары строчек ?