我的代码将二进制文件中的数据读取到uint8_t向量中,当我尝试读取向量中包含30亿个元素的3GB文件时,它失败了。我在内存位置收到了一个(std :: length_error ...),我现在确定是因为矢量数据很大,因为vector.max_size约为21.5亿。但是3GB的数据不是很大,有没有办法将这些数据大小存储到向量中?

最佳答案

您能new那么多字节吗?您可能没有足够的可用连续虚拟内存。通常,页面大小为0x10004096字节。这意味着您的30亿字节(即3 GB)将需要超过732,000页的连续虚拟内存可用性来满足所需的完整3 GB。更好的选择可能是将它们分配到很大的块中并建立一个链表。您也可以使用不需要连续内存的另一个容器,也可以将多个向量链接在一起。

09-26 20:34