我的代码将二进制文件中的数据读取到 uint8_t vector 中,当我尝试读取该 vector 中包含 30 亿个元素的 3GB 文件时失败了。我得到一个 (std::length_error at memory location...),我现在确定这是因为数据量非常大,因为 vector.max_size 约为 21.5 亿。但是 3GB 的数据并没有那么大,有没有办法将这个数据大小存储到 vector 中?
最佳答案
你能new
那么多字节吗?您可能没有足够的空闲连续虚拟内存。通常页面大小为 0x1000
或 4096
字节。这意味着您的 30 亿字节或 3 GB
将需要超过 732,000
页的连续虚拟内存可用性才能满足全部 3 GB
的要求。更好的选择可能是将它们分配成巨大的 block 并构建一个链表。您还可以使用另一个不需要连续内存的容器或将多个 vector 链接在一起。
关于c++ - 创建一个包含 30 亿个 uint8 元素的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601803/