我在OS X 10.9.3,2.4 GHz Intel Core i5,8 GB DDR3上运行以下代码
int main() {
vector<int> expectation(10e8, -1.0);
cout << "size()=" << expectation.size() << endl;
return 0;
}
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倍 我想知道,为什么 b 案件的时间大约比案件 a 大100倍?
UPD
我找到了,我迷路的地方!
10e8 = 10 ^ 9 ints = 4 GB
10e9 = 10 ^ 10 ints = 40 GB
答案 0 :(得分:7)
假设每个int
有4个字节,第一个使用4GB内存,并且可以轻松适应8GB内存。第二个使用40GB,需要保持交换到磁盘。那会慢得多。
注意10e9
表示10x10 9 ,或10 10 。您可能认为这意味着10 9 ,这将适合RAM。那将是1e9
。