我的应用程序需要将数兆字节到数十吉字节的二进制数据(多个文件)加载到RAM中。经过一些搜索,我决定使用
我将为每个文件使用一个向量。由于应用程序先前知道文件大小,因此会调用
我有一些问题:
std::vector<unsigned char>
来实现这个目的,尽管我不确定它是否是最佳选择。我将为每个文件使用一个向量。由于应用程序先前知道文件大小,因此会调用
reserve()
来为其分配内存。有时应用程序可能需要完全读取文件,在其他情况下只需要部分读取,并且向量的迭代器非常适合此类操作。它可能需要从RAM中卸载文件并放入其他文件,std::vector::swap()
和std::vector::shrink_to_fit()
将非常有用。我不想处理低级内存分配(否则将使用C语言)。我有一些问题:
- 应用程序必须从列表中加载更多的文件到RAM中。如果要加载另一个文件,它该如何知道是否有足够的内存空间?它应该调用
reserve()
并查找错误吗?怎么做?参考文献仅表示在请求的大小大于std::vector::max_size
时,reserve()
会抛出异常。 std::vector<unsigned char>
是否适用于将这么大量的二进制数据加载到RAM中?我担心std::vector::max_size
,因为其参考文献说它的值将取决于系统或实现限制。我认为系统限制是可用RAM,是吗?所以没有问题。但是,如果有关于实现的任何限制会阻止我想要的操作怎么办?如果是,请给我提供一种替代方案。- 如果我想使用除N吉字节外的所有RAM空间,最好的方法是什么?真的要使用
sysinfo()
并根据可用RAM推断出是否可以加载每个文件吗?
mmap
的方式。如果你想移植到Windows,boost有相应的库。 - Martin Bonner supports Monica