我正在使用Armadillo來處理從CSV文件讀取的C++中的大型矩陣。犰狳:堆上的高效矩陣分配
mat X;
X.load("myfile.csv",csv_ascii);
colvec x1 = X(span::all,0);
colvec x2 = X(span::all,1);
//etc.
所以X1,...,XK(爲k=20
說)是將通常具有行範圍爲2000〜16000。我的問題X. X的列是:
我如何分配(並隨後釋放)X到堆(免費存儲)?
This section Armadillo文檔解釋了mat的輔助內存分配。這與堆分配相同嗎?它需要預先了解矩陣尺寸,直到從csv讀取X才知道:
mat(aux_mem*, n_rows, n_cols, copy_aux_mem = true, strict = true)
任何建議將不勝感激。 (我正在使用g ++ - 4.2.1;我當前的程序在我的Macbook Pro上本地運行良好,但是當我在大學的計算羣集(Linux g ++ - 4.1.2)上運行它時,我遇到了分段錯誤。太大而無法發佈)。
編輯:我落得這樣做:
arma::u32 Z_rows = 10000;
arma::u32 Z_cols = 20;
double* aux_mem = new double[Z_rows*Z_cols];
mat Z(aux_mem,Z_rows,Z_cols,false,true);
Z = randn(Z_rows, Z_cols);
其堆上第一分配內存,然後告訴矩陣Z使用它。
犰狳是否也釋放了內存,或者應該由用戶完成? –
@MikelUrkia - 任何正確編寫的C++庫會自動釋放其對象所使用的內存。是什麼讓你覺得它需要手動完成? C++不是C. – mtall
我在C和C++中很新穎,我很欣賞你花時間回答我的問題。正如我的另一個問題所提到的,如果犰狳負責記憶管理,它將大大地減輕我的工作量。 –