2012-05-03 40 views
1

我想要一個數組,網格[50000] [50000],我試圖做矢量,但是當我運行代碼時,它停止。沒有錯誤。只是等待。任何建議?巨大的矢量「掛起」程序? (50000 x 50000細胞)

#include <iostream> 
#include <vector> 

using namespace std; 

typedef std::vector<int> IntVec; 
typedef std::vector<IntVec> IntGrid; 
IntGrid grid(50000, IntVec(50000)); 

int main(){ 
    grid[0][0]=3; 
    cout<<grid[0][0]<<endl; 
} 
+1

*「我想要一個數組,網格[50000] [50000],」* - 爲什麼?這是基於您提出的實施的實際需求還是需求?這是太多的內存來抓,可能有更好的方法,但你需要告訴我們你正試圖解決的問題。 –

+0

@EdS。你可以看看這裏:http://stackoverflow.com/questions/10437622/how-to-implement-infinite-multidimensional-array/10438688#10438688我想使用該代碼至少50k輸入。 CAC [50K] [50K]。 – vkx

+2

@ vk7x:想要的東西不會讓他們發生。你應該查看稀疏矩陣等。 –

回答

3

作爲一個非常粗略計算,

50,000行× 50000列× 4個字節/整數= 10,000,000,000 bytes

除非您的計算機具有超過10 GB的RAM,否則您的內存不足。

您可以重寫程序以處理較小的數據塊,或使用文件來存儲不需要立即訪問的陣列部分?

+0

你可以看看這裏:http://stackoverflow.com/questions/10437622/how-to-implement- infinite-multidimensional-array/10438688#10438688我想爲至少50k輸入使用該代碼。 CAC [50K] [50K]。 – vkx

+1

你爲什麼不告訴我們你想要完成什麼?也許我們可以想出更有效的解決方案。 –

+0

實際上,任何普通的x86-64 Linux安裝程序都應該能夠使用交換空間分配那麼多的內存。但是與RAM相比,這是非常緩慢的。 – leftaroundabout