c++ - 创建一个包含 30 亿个 uint8 元素的 vector

标签 c++

我的代码将二进制文件中的数据读取到 uint8_t vector 中,当我尝试读取该 vector 中包含 30 亿个元素的 3GB 文件时失败了。我得到一个 (std::length_error at memory location...),我现在确定这是因为数据量非常大,因为 vector.max_size 约为 21.5 亿。但是 3GB 的数据并没有那么大,有没有办法将这个数据大小存储到 vector 中?

最佳答案

你能new那么多字节吗?您可能没有足够的空闲连续虚拟内存。通常页面大小为 0x10004096 字节。这意味着您的 30 亿字节或 3 GB 将需要超过 732,000 页的连续虚拟内存可用性才能满足全部 3 GB 的要求。更好的选择可能是将它们分配成巨大的 block 并构建一个链表。您还可以使用另一个不需要连续内存的容器或将多个 vector 链接在一起。

关于c++ - 创建一个包含 30 亿个 uint8 元素的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601803/

相关文章:

C++ bool 运算符==

C++:重载下标运算符(不同的返回类型)

c++ - 带有 g++ 5.4.0 的 asan 无法在 travis CI 上运行

c++ - 在 dll 中使用映射时出现访问冲突错误

c++ - C++ 中的 Unicode 到 UTF-8

c++ - 如何在 C++ 中重新分配函数名称

c++ - 用于访问系统资源信息的多平台库

c# - 如何从 Native 组件调用函数或触发事件到 C#/XAML 组件中?

c++ - 获取 std::list 的前 N ​​个元素?

c++ - 看看我们是否可以得到回文