Форум программистов, компьютерный форум CyberForum.ru

Неожиданный результат при сравнении производительности вектора и обычного массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Игра, подобная шашкам. Оптимизация кода http://www.cyberforum.ru/cpp-beginners/thread1243145.html
Добрый вечер. У меня маленькая проблема: пишу игру, наподобие шашек. Почти готово, потом выложу исходники для критики. Сейчас делаю подсветку хода для дамок. т.к. дамке все равно куда идти, то все отличие будет заключаться в том, кого она встретит на пути - свою или чужую шашку. Следовательно это дело можно завернуть в функцию. Проблема в том, что очень много повторяющегося кода, а мне это ужасно...
C++ Написать свой движок с нуля Как написать свой движок с нуля при помощью C++. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread1242826.html
C++ Альтернативный вызов функции
1. Интересует метод вызова функции через указатель(или по другому). 2. Интересует метод взятия кол-ва аргументов функции и их типов, а так же тип возвращяемого значения. По второму пункту вообще ничего не нашёл, а по первому есть некоторые вопросы. #include "FTD2XX.h" // библиотека от FTDI typedef FT_STATUS (*pFT_Open) (int, FT_HANDLE *); // тип данных "функция FT_OPEN" HMODULE hMod =...
C++ СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++
C++ Разделить выпуклый многоугольник на 4 равные части двумя взаимно перпендикулярными прямыми http://www.cyberforum.ru/cpp-beginners/thread1242320.html
Почти то же, что и тут: http://www.cyberforum.ru/java/thread1022760.html, но хочется решить на C++. А именно: Есть некоторый выпуклый многоугольник, который необходимо разделить на 4 равные части двумя взаимно перпендикулярными прямыми. Входные данные: количество вершин и их координаты в порядке обхода. Координаты не больше 10000, самих координат не больше 1500. Координаты все целочисленные....
C++ Отследить изменение памяти сторонним процессом Есть основное приложение1. Есть приложение2, которое считывает и изменяет его память. Надо отследить адреса, действие(чтение или запись), значение до и после действия. Куда копать? подробнее

Показать сообщение отдельно
MAKAPOH
30 / 20 / 1
Регистрация: 08.09.2012
Сообщений: 77
16.08.2014, 15:54     Неожиданный результат при сравнении производительности вектора и обычного массива
Добрый день.
Ради интереса сравнил проиводительность вектора с обычным массивом и получил неожиданный результат.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <chrono>
#include <vector>
 
int main()
{
  const std::size_t N = 40000000;
  std::vector<std::size_t> vector(N);
  std::size_t *raw_array = new std::size_t[N];
 
 
  auto start_time = std::chrono::high_resolution_clock::now();
  for (std::size_t i=0; i<N; ++i)
    vector[i] = i;
    //vector.at(i) = i;
  auto end_time = std::chrono::high_resolution_clock::now();
  std::cout << "vector: "
            << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()
            << " ms\n";
 
 
  start_time = std::chrono::high_resolution_clock::now();
  for (std::size_t i=0; i<N; ++i)
    raw_array[i] = i;
  end_time = std::chrono::high_resolution_clock::now();
  std::cout << "raw array: "
            << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()
            << " ms\n";
 
 
  delete [] raw_array;
  return 0;
}
DEBUG: Vector(254ms) Raw array(105ms) - в 2,4 раза быстрее простой массив.
RELEASE: Vector(43ms) Raw array(81ms) - в 1,8 раза быстрее вектор.
Компилятор - Microsoft VisualC++ 12.0 (amd64)
ОС - Windows 7 64 bit

Мой вопрос в том как так получается что шаблонный класс обгоняет простой массив по скорости?
И ещё, если вместо operator[] использовать функцию at() для доступа к элементам вектора, то это никак не влияет на результат (в пределах погрешности измерения) хотя функция at() должна делать проверку на выход за границу размера вектора.
Заранее спаибо за ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru