0

我正在使用以下代码打开大小约为 400 到 800MB 的文件:

#include <boost\interprocess\file_mapping.hpp>
#include <boost\interprocess\mapped_region.hpp>
#include <iostream>
#include <vector>
#include <string>

using namespace boost::interprocess;
using namespace std;

int main(){
    file_mapping fm("C:\\test\\1.txt",read_only);
    mapped_region region(fm,read_only);
    const char* const data = static_cast<const char*>(region.get_address());
    const size_t max_size = region.get_size();

    cout << max_size;

    int b;
    cin >> b;
}

如果我将上面的代码指向一个小文件,我也不会例外。但是,当查看数百 MB 文件(在外部 USB 上)时,我得到一个例外:

ReadingFiles.exe 中 0x7521C41F 处未处理的异常:Microsoft C++ 异常:内存位置 0x0040FBD4 处的 boost::interprocess::interprocess_exception。

我有 2.4GB 的可用 RAM - 所以不应该是我的内存用完了吗?

4

1 回答 1

0

如果您的程序被编译为 32 位程序,那么您很可能内存不足。有点。2.4GB 空闲并不一定意味着 2.4GB 空闲连续内存。您可能无法获得足够大的数据块来映射您的文件。

于 2013-08-31T23:05:26.093 回答