我正在使用一些C ++代码,这些代码实现了一个使用大量内存的图形算法(gSpan的亲戚,但这并不重要)。代码在C ++中实现,并使用std :: vectors来存储许多小元素(每个元素大约64个字节)。但是,我在比原作者更大的数据集上使用它,而且我的内存不足。
然而,似乎我过早地耗尽了内存。不成?我怀疑这是因为std :: vectors每次需要更多内存时都会尝试增加大小,并且向量会依赖于连续的内存。我有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
所以,显然,我们已达到向量的最大大小,并且库试图分配更多,并且失败。
所以我的问题是:
由于我不知道最终会使用多少内存,所以我知道即使我进行了更改,仍然可能没有足够的内存来进行计算,但我怀疑我至少可以获得更多内存。我现在开始了,这似乎很快就放弃了。
答案 0 :(得分:6)
我会尝试使用std::deque
作为vector
的直接插入内容。有可能因为它(通常)使用了一组块,所以扩展deque
可能比扩展vector
便宜得多(就额外的内存而言)。