我正在尝试将对象的实例推送到向量(例如 A a;vectorA.push_back(a)),但是一旦向量的大小超过 16777216(16*1024*1024 ) (向量的容量也是 16777216,这意味着向量将重新分配内存)。
任何人都知道我应该如何处理这个问题?我检查了使用的内存大约是 320MB。
由于 std::vector 是基本 C 数组的包装器,因此它具有与普通数组相同的限制,此处描述:C++ 中是否存在最大数组长度限制? 基本上我同意上面的评论,即这是连续的内存限制。要解决此问题,您可以从使用 std::vector 切换到其他不使用数组的类(如 map、list 或 deque,具体取决于您的需要)。另一种解决方案是使用多个向量。
reserve()
在将所有数据推送到其中之前尝试调用。这预先分配了一些内存,因此避免了很多重新分配。如果您知道您将拥有超过 16777216 个元素,那么调用reserve(n)
wheren
是一个数字 >16777216 并且更接近您的最终大小(如果您知道的话)。