构造大尺寸</int>的vector <int>

时间:2014-10-03 13:19:25

标签: c++ macos memory-management vector

我在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倍 我想知道,为什么 b 案件的时间大约比案件 a 大100倍?

UPD
我找到了,我迷路的地方! 10e8 = 10 ^ 9 ints = 4 GB
10e9 = 10 ^ 10 ints = 40 GB

1 个答案:

答案 0 :(得分:7)

假设每个int有4个字节,第一个使用4GB内存,并且可以轻松适应8GB内存。第二个使用40GB,需要保持交换到磁盘。那会慢得多。

注意10e9表示10x10 9 ,或10 10 。您可能认为这意味着10 9 ,这将适合RAM。那将是1e9