原因:当我尝试push_back超过 16777216 时,矢量崩溃
Why: vector crash when I try to push_back more than 16777216
我正在尝试将对象的实例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并且更接近您的最终大小(如果您知道的话(。
相关文章:
- 整数不会重复超过随机数
- 当用户超过按钮点击限制时报告
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 当需要超过16GB的连续内存时,内存分配失败
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- 写入超过 1GB 的.txt文件时出现奇怪的行为
- 强制复制分配超过移动分配运算符
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- C++命名管道客户端读取的字节不会超过 4096 字节
- C++字符数组不接受超过 4 个字符的输入
- 为什么只有当我的容器有超过 32 个元素时才由 std::sort 调用交换?
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- C++ 可变参数模板实例化深度超过最大值 900
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- 时限超过C++
- 在 1.5 秒内找到 3 到 4 个不同整数的中位数超过 2000 万
- 优化使用 C++ 查询 SQLite DB 中超过 5000 万条数据记录的方式
- 原因:当我尝试push_back超过 16777216 时,矢量崩溃