【发布时间】:2011-04-26 11:59:50
【问题描述】:
可能的重复:
Using arrays or std::vectors in C++, what's the performance gap?
std::vector is so much slower than plain arrays?
内存是 1000 个元素的向量 array[] 是一个包含 1000 个元素的整数数组
for (iteration = 0; iteration < numiterations; iteration++) {
for (j = 1; j < numints; j++) {
memory[j] += memory[j - 1];
//array[j] += array[j - 1];
}
}
如果我在运行100次迭代后比较for循环的时间,访问所需的时间与vector相比非常小
为什么会这样? 因为我认为两者都需要恒定且几乎相同的时间..
【问题讨论】:
-
你能告诉我们更多关于你测试这个平台的信息吗?编译器,优化/构建类型,诸如此类的东西?通常,
vector在调试版本中速度较慢,但在发布版本中与原始数组的速度相同...... -
请参阅 [ 在 C++ 中使用数组或 std::vectors,性能差距是什么? ](stackoverflow.com/questions/381621/…)。接受的答案显示生成的程序集在向量和数组之间基本上没有区别,使用 g++ 和 -O3。
-
@ajay,什么编译器标志(包括优化设置)?而且,这是一个相当旧的版本。
-
“我认为两者都需要恒定的 [...] 时间”-> 不可能。随着序列变大,迭代序列需要更长的时间。这称为线性时间。
-
@Fred:我的意思是访问特定元素而不是整个数组或向量,无论如何,在当前上下文中,数组和向量都是固定大小的 1000 个元素。