2014-10-03 77 views
2

我運行過程中出現在OS X 10.9.3的2.4 GHz英特爾酷睿i5,8 GB DDR3構建載體<int>大尺寸

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案例變得比案件大約100倍大a

UPD
我發現了,我在哪裏丟了!
10E8 = 10^9個整數= 4 GB
10E9 = 10^10個整數= 40 GB

回答

7

假定每int 4個字節,第一個使用的存儲器4GB和舒適地配合到你8GB的RAM 。第二個使用40GB,並且需要保持交換到磁盤。這會慢很多。

注意10e9裝置10×10 9 ,或10 。你可能認爲這意味着10 ,這將適合RAM。那將是1e9

+0

沒有。對於10^8 int,我們需要400MB和10^9 - 4GB – Temak 2014-10-03 13:29:23

+6

@Enor:請參見最後一句。你的測試是10^9和10^10的整數。 – 2014-10-03 13:31:28