Opt*_*Opt 6 c++ optimization performance stl
我正在尝试优化我的C++代码.我使用动态分配的C++数组和使用std :: vector搜索互联网,并且通常看到有利于std :: vector的建议,并且两者之间的性能差异可以忽略不计.例如,在C++中使用数组或std :: vector,性能差距是多少?.
但是,我编写了一些代码来测试迭代数组/向量并为元素赋值的性能,我通常发现使用动态分配的数组比使用向量快近3倍(我事先指定了向量的大小) ).我用过g ++ - 4.3.2.
但是我觉得我的考试可能忽略了我不知道的问题,所以我很感激你对这个问题的任何建议.
谢谢
使用的代码 -
#include <time.h>
#include <iostream>
#include <vector>
using namespace std;
int main() {
clock_t start,end;
std::vector<int> vec(9999999);
std::vector<int>::iterator vecIt = vec.begin();
std::vector<int>::iterator vecEnd = vec.end();
start = clock();
for (int i = 0; vecIt != vecEnd; i++) {
*(vecIt++) = i;
}
end = clock();
cout<<"vector: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
int* arr = new int[9999999];
start = clock();
for (int i = 0; i < 9999999; i++) {
arr[i] = i;
}
end = clock();
cout<<"array: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
}
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,尝试使用指针而不是整数索引迭代普通数组(代码看起来就像向量迭代,因为STL迭代器的点对于大多数操作看起来像指针算术).我敢打赌,在这种情况下,速度将完全相同.这当然意味着您应该选择矢量,因为它可以省去手动管理数组的麻烦.
关于标准库类的事情std::vector是,是的,天真地,它比原始数组要多得多.但是所有这些都可以由编译器简单地内联,这意味着如果启用了优化,它就会变得与使用原始数组的代码基本相同.然后速度差异不可忽略但不存在.在编译时删除所有开销.
但这需要启用编译器优化.