【发布时间】:2011-10-16 12:44:39
【问题描述】:
我正在摆弄 VS2010 中的性能向导,这是一个测试仪器(函数调用计数和计时)的向导。
在了解了 C++ STL 中的向量之后,我决定看看我能获得哪些关于用 100 万个整数填充向量的性能信息:
#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 毫秒。这是函数调用的屏幕截图,左侧没有上述代码行,右侧有。我真的不明白这个结果,考虑到我了解到如何定义向量容量,如果你知道你会用一吨填充它是一件好事,这对我来说没有意义。指定储备基本上使大多数函数调用翻了一番。
【问题讨论】:
-
我也想知道这个 _RTC_CheckESP 是什么,它总是最常被调用的函数。
-
如何编译代码?哪个编译器,有或没有优化?
-
我刚刚安装了visual studio Ultimate 2010的试用版,还没有做任何优化,因为我还没有学会如何做。所以我基本上只是按下绿色按钮。单击性能向导会为我完成此操作。
-
我明白了。在菜单栏中有一个下拉菜单(就在绿色“运行”按钮旁边),它可能选择了
Debug。将其更改为Release并重新编译。然后编译器将启用优化。 :) -
只是这样我们就不会忽略这里完全显而易见的事情......您在循环之前(阅读:外部)添加
reserve行,对吗?
标签: c++ performance visual-studio-2010