我在 OS X 10.9.3、2.4 GHz Intel Core i5、8 GB DDR3 上运行以下代码
a.cpp
int main() {
vector<int> expectation(10e8, -1.0);
cout << "size()=" << expectation.size() << endl;
return 0;
}
b.cpp
int main() {
vector<int> expectation(10e9, -1.0);
cout << "size()=" << expectation.size() << endl;
return 0;
}
-
$ time ./a.out
size()=1000000000
real 0m3.935s
user 0m1.530s
sys 0m2.103s
$ time ./b.out
size()=10000000000
real 4m49.853s
user 0m16.186s
sys 0m22.966s
在 b.pp 中我们有 10 倍大的 vector 。
我想知道,为什么情况 b 的时间比情况 a 大 100 倍?
UPD
我找到了,我迷路的地方!
10e8 = 10^9 整数 = 4 GB
10e9 = 10^10 整数 = 40 GB
最佳答案
假设每个 int
有 4 个字节,第一个使用 4GB 内存并且适合您的 8GB RAM。第二个使用 40GB,需要不断交换到磁盘。那会慢很多。
请注意,10e9
表示 10x109,或 1010。您可能认为这意味着 109,这将适合 RAM。那将是 1e9
。
关于c++ - 构造大尺寸的 vector<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179733/