![](/img/trans.png)
[英]What is the best way to process large arrays without hitting memory requirements in C++?
[英]What is the best way to treat large arrays of numbers in C++?
我需要處理大型浮點數數組(> 200,000個數字),並使用這些數組執行一些數學運算。
您建議如何處理這些數組,以免出現任何堆棧溢出問題?
更新 :我想做簡單和復雜的數學運算(求和,乘積,sin,cos,arctan)。
您需要順序操作的純數字數據?
std::valarray<double>
如果分析顯示這使您放慢了速度,請尋找方法以使其更快
std::valarray<double>::resize()
(是的,不幸的是沒有reserve()
。
為什么要使用std::valarray<double>
來獲取數字數據? 如果要對每個元素執行操作,只需調用
std::valarray<double>::apply(somefunction)
參見以獲取更多信息: C ++參考 。
如果您希望能夠reserve()
,則需要std::vector
,它也可以,但是對於您可能想使用的數學函數沒有重載。
編輯:這當然是假設您有足夠的內存來將所有數組放入std::valarray
。 如果不是,則應拆分200,000行,以便同時只有這么多的浮點數在內存中。
如果數據稀疏,則可以使用boost的sparse_matrix
http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/matrix_sparse.htm來表示數據結構並顯着減少內存需求。
否則,我建議您尋找一種方法,將數據拆分為多個塊並在內存中處理一個塊,然后將該狀態存儲到文件中並重復。
我建議您像對待每10.000個10.000一樣對待它們,然后將所有內容相加? 這取決於您正在執行的操作。
取決於您要如何處理它們。
另外,正如克里斯在評論中所說,為數組動態分配內存(從堆中獲取內存),並避免將其用作局部變量(在堆棧中分配)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.