【发布时间】:2009-12-22 11:21:30
【问题描述】:
当使用 C++ 向量时,花费的时间是 718 毫秒, 而当我使用 Array 时,时间几乎是 0 毫秒。
为什么会有这么大的性能差异?
int _tmain(int argc, _TCHAR* argv[])
{
const int size = 10000;
clock_t start, end;
start = clock();
vector<int> v(size*size);
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size; j++)
{
v[i*size+j] = 1;
}
}
end = clock();
cout<< (end - start)
<<" milliseconds."<<endl; // 718 milliseconds
int f = 0;
start = clock();
int arr[size*size];
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size; j++)
{
arr[i*size+j] = 1;
}
}
end = clock();
cout<< ( end - start)
<<" milliseconds."<<endl; // 0 milliseconds
return 0;
}
【问题讨论】:
-
这是如何编译的?是否启用了优化?你使用的是哪个编译器?
-
int arr[size*size]:导致我的机器出现分段错误(在没有优化的情况下构建);因为把它放在堆栈上似乎超过了编译器允许的堆栈帧的大小:(gcc 版本 4.2.1(Apple Inc. build 5646))stackoverflow.com/questions/216259/…
-
有趣的是,如果你动态分配数组,我的机器上的时间也会上升到大约 500 毫秒(你应该这样做,因为它太大了。正如 Martin York 所说,你要求否则堆栈溢出)
-
vector 专门用于数组的随机访问,因此我认为它的性能可能会有所折衷,最好在随机访问的情况下使用(插入和删除数组的随机元素)寻求优化。
-
请注意,唯一正确的答案是下面 el.pescado 给出的答案。如果数组没有被优化掉,那么你也会像 Loki Astari 评论的那样得到堆栈溢出。
标签: c++ visual-studio arrays vector