【发布时间】:2013-03-13 07:54:13
【问题描述】:
我目前正在编写一个需要尽可能好地执行的应用程序。我使用 VS2012 作为我的 IDE(和编译器)。
我注意到,当我对向量进行迭代时,与迭代器相比,指针解决方案在速度方面要快得多。这是为什么?我的意思是,迭代器基本上是一样的。至少应该是。
看看这个例子:
std::vector<int> v;
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
// Do stuff with *it
}
for (int* i = &v[0], i <= &v[v.size()-1]; i++) {
// Do stuff with *i
}
编译器是否需要任何优化?我正在使用所有标准设置,所以 -O2 已经启用。提前致谢。
编辑: 我在 Release 中编译,并使用 Ctrl+F5 运行(即没有调试)。
EDIT2: 实际的源代码是快速排序的实现。 Here is a link to the full source,很短,请查看。
【问题讨论】:
-
你可能在调试模式下编译,迭代器执行断言。
-
看看调试生成的汇编代码和优化生成的代码之间的区别。
-
您的分析如何?循环中发生了什么?你用的是哪个编译器?
-
我用的是VS2012自带的最新MSVC。
-
检查_ITERATOR_DEBUG_LEVEL的设置。
标签: c++ performance vector iterator visual-c++-2012