原因:当我尝试push_back超过 16777216 时,矢量崩溃

Why: vector crash when I try to push_back more than 16777216

本文关键字:16777216 超过 崩溃 back push 原因      更新时间:2023-10-16

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

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

由于 std::vector 是基本 C 数组的包装器,因此它具有与普通数组相同的限制,如下所述: C++是否有最大数组长度限制?基本上我同意上面的评论,这是连续的内存限制。要变通方法,您可以从使用 std::vector 切换到不使用数组的其他类(如地图、列表或 deque,具体取决于您的需要(。另一种解决方案是使用多个向量。

尝试在将所有数据推送到reserve()之前调用它。这预先分配了一些内存,因此避免了如此多的重新分配。如果您知道您将拥有 16777216 多个元素,那么调用 reserve(n) 其中 n 是一个数字>16777216并且更接近您的最终大小(如果您知道的话(。