[英]Space efficient C++ vector allocator for large vectors?
我正在使用一些C ++代碼,這些代碼實現了使用大量小內存塊(gSpan的相對對象,但這沒關系)的圖形算法。 該代碼用C ++實現,並使用std :: vectors存儲許多小元素(每個小元素約64個字節)。 但是,我在比原始作者更大的數據集上使用了此方法,並且內存不足。
但是,看來我的內存不足了。 不成? 我懷疑這是因為std :: vector在每次需要更多內存時都試圖增加大小,而vector堅持使用連續內存。 我有8GB的內存和18GB的交換空間,但是當拋出std :: bad_alloc時,我僅使用6.5GB本地用戶和約8GB虛擬用戶。 我已經捕捉到bad_alloc調用並打印出向量大小,這就是我看到的內容:
size: 536870912
capacity: 536870912
maxsize: 1152921504606846975
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
因此,很明顯,我們達到了向量的最大大小,並且庫正在嘗試分配更多的向量,但失敗了。
所以我的問題是:
由於我不知道最終會使用多少內存,因此我知道即使進行更改,仍然可能沒有足夠的內存來進行計算,但是我懷疑我至少可以得到更多的存儲空間現在,這似乎很快就放棄了。
我會嘗試使用std::deque
作為vector
的直接插入。 由於有可能(由於)通常使用塊的集合,因此擴展deque
可能比擴展vector
便宜(就所需的額外內存而言)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.