2013-07-25 96 views
1

我试图push_back对象的实例向量(例如:a; vectorA.push_back(a)) ,但代码崩溃时,只要我尝试push_back更多一旦矢量的大小大于16777216(16 * 1024 * 1024)(矢量的容量也是16777216,这意味着矢量将重新分配存储器)。为什么:当我尝试push_back时导致崩溃超过16777216

任何人都知道我应该如何处理这个问题?我查了用的内存大概是320MB。

+4

vector :: max_size的结果是什么? http://www.cplusplus.com/reference/vector/vector/max_size/ –

+0

难道是你正在击中矢量对象的内部限制吗? 16777216 = 2^24 – Marwie

+5

如果它不超过max_size,则可能没有足够的可用内存来执行重新分配。 –

回答

0

由于std :: vector是基本C数组的封装,它与普通数组有相同的限制,这里描述如下:Is there a max array length limit in C++? 基本上我同意上面的注释,这是连续的内存限制。 要解决您的问题,您可以从使用std :: vector切换到其他一些不使用数组(如地图,列表或deque取决于您的需要)的类。 另一个解决方案是使用几个向量。

0

尝试在将所有数据存入之前先致电reserve()。这预先分配了一些内存,所以避免了很多重新分配。如果您知道您将拥有超过16777216个元素,那么请致电reserve(n),其中n是一个数字> 16777216,如果您知道它,则更接近您的最终尺寸。

相关问题