Я работаю с мастером производительности в VS2010, который тестирует инструментарий (подсчет вызовов функций и время.)
После изучения векторов в C ++ STL я просто решил посмотреть, какую информацию я могу получить о производительности заполнения вектора 1 миллионом целых чисел:
#include <iostream>
#include <vector>
void generate_ints();
int main() {
generate_ints();
return 0;
}
void generate_ints() {
typedef std::vector<int> Generator;
typedef std::vector<int>::iterator iter;
typedef std::vector<int>::size_type size;
Generator generator;
for (size i = 0; i != 1000000; ++i) {
generator.push_back(i);
}
}
То, что я получаю: 2402,37 миллисекунды прошедшего времени для вышеперечисленного. Но я узнал, что векторы должны сами изменять размеры, когда у них заканчивается емкость, так как они непрерывны в памяти. Поэтому я подумал, что получу лучшую производительность, сделав одно дополнение к приведенному выше:
generate.reserve(1000000);
Однако это удваивает время выполнения программы примерно до 5000 миллисекунд. Вот скриншот вызовов функций, слева без строки кода выше и справа с. Я действительно не понимаю этот результат, и он не имеет смысла для меня, учитывая то, что я узнал о том, как определение емкости векторов, если вы знаете, что наполните ее тонной, это хорошая вещь. Задание резерва в основном удваивает большинство вызовов функций.
http://imagebin.org/179302