为什么:当我尝试push_back超过16777216时,矢量崩溃

时间:2013-07-25 15:54:11

标签: c++ vector

我正在尝试将对象的push_back实例推送到向量(例如A a; vectorA.push_back(a)) 但是每当我尝试push_back时,代码会崩溃,一旦矢量的大小超过16777216(16 * 1024 * 1024)(矢量的容量也是16777216,这意味着矢量将重新分配内存)。

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

2 个答案:

答案 0 :(得分:0)

由于std :: vector是基本C数组的包装,因此它具有与普通数组相同的限制,如下所述:Is there a max array length limit in C++? 基本上我同意上面的评论,这是连续的内存限制。 要解决此问题,您可以从使用std :: vector切换到其他不使用数组的类(如map,list或deque,具体取决于您的需要)。 另一个解决方案是使用几个向量。

答案 1 :(得分:0)

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