2016-08-26 137 views
-1

我想重現一箇舊的R代碼,爲了獲得一些速度,我已經加入了C++。 此代碼要求使用預加載的數據(6維矩陣13689 x 126)(每個文件在.txt文件中的權重均爲28 MB)。它沒有引起任何問題,R將它加載到內存中。在C++中讀取'大'數據文件

我構建了一個C++代碼(我是C++的新手),我試圖「預加載」這些數據(是否有預加載它在頭文件btw?)。

int i, j; 
const int length_grid1 = 13689; 
const int length_grid_pl = 126; 

ifstream in; 
//double M1_BETA[length_grid1][length_grid_pl]; // either this, or the other one 
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA; 
in.open("preloaded_object/M1_BETA.txt"); 
for (i = 0; i < length_grid1; i++) { 
    for (j = 0; j < length_grid_pl; j++) { 
     in >> M1_BETA[i][j]; 
    } 
} 
in.close(); 

兩個版本,採用雙層或數組不起作用:我可以編譯的文件(使用英特爾作曲),但是當我啓動.exe文件,它會立即崩潰。發生這種情況只有一個矩陣加載...我必須加載其中的6個。

我不認爲這是來自我的代碼的問題,當我減少它自己執行的數據維度沒有任何問題。
請注意,如果所有內容都未加載,我無法在此後運行該程序。重新加載它會部分地減少我認爲的速度(爲了獲得計算速度,我轉而使用C++)。

程序崩潰是因爲28MB太多了嗎?似乎很奇怪,因爲R沒有任何問題,例如...

否則,我可以預加載的方式,使其佔用內存較少的地方?之後我需要輕鬆訪問任何一行數據(逐個單元格並不那麼重要,我真正需要的是真正快速訪問特定行)。

或者,在C++中是否還有另一種存儲數據的方式,可以隨時使用?

在此先感謝。

+1

'std :: array ,length_grid1> M1_BETA;'通常在堆棧實例化,這對於大多數環境中的堆棧來說太大了,是的。 –

+3

你應該爲大數據使用'std :: vector'。 – NathanOliver

+0

它確實與std :: vector一起工作,謝謝!數組有什麼不同? –

回答