C++ 原因:当我试图将_向后推超过16777216时,向量崩溃

C++ 原因:当我试图将_向后推超过16777216时,向量崩溃,c++,vector,C++,Vector,我试图将对象的实例推回向量,例如a;矢量推回 但是当向量的大小超过16777216 16*1024*1024时,每当我试图再次推回_时,代码就会崩溃。向量的容量也是16777216,这意味着向量将重新分配内存 有人知道我应该如何处理这个问题吗?我检查过使用的内存大约是320MB 由于std::vector是基本C数组的包装器,因此它与普通数组具有相同的限制,如下所述: 基本上我同意上面的评论,这是连续内存限制。 要解决这个问题,您可以从使用std::vector切换到其他一些类,根据您的需要,这

我试图将对象的实例推回向量,例如a;矢量推回 但是当向量的大小超过16777216 16*1024*1024时,每当我试图再次推回_时,代码就会崩溃。向量的容量也是16777216,这意味着向量将重新分配内存


有人知道我应该如何处理这个问题吗?我检查过使用的内存大约是320MB

由于std::vector是基本C数组的包装器,因此它与普通数组具有相同的限制,如下所述: 基本上我同意上面的评论,这是连续内存限制。 要解决这个问题,您可以从使用std::vector切换到其他一些类,根据您的需要,这些类不使用map、list或deque等数组。
另一种解决方案是使用多个向量。

尝试调用reserve,然后再将所有数据推入reserve。这预先分配了一些内存,因此避免了大量的重新分配。如果您知道您将拥有超过16777216个元素,则调用reserven,其中n是一个大于16777216的数字,并且更接近您的最终大小(如果您知道的话)。

vector::max_size的结果是什么?如果未超过最大值,则可能是您没有足够的连续可用内存来执行重新分配,因为在此之前可能不会失败。这里有不止一个可能的故障原因。但是max_size是它肯定会失败的上限。程序只是崩溃了,还是没有捕获到异常?具体来说,您是否尝试过捕获std::bad_alloc?您可以尝试另一种数据结构,即deque,它不要求整个数据是连续的。如果您知道向量的大小,也可以尝试将其保留为最大值。这可能是因为,当你向后推时,新的和旧的向量数组都需要在内存中保存一段时间。在保留新向量时,可以避免这种情况。