boost::memory-mapping 的问题 ~500MB,外部 USB 文件

Posted

技术标签:

【中文标题】boost::memory-mapping 的问题 ~500MB,外部 USB 文件【英文标题】:Issue with boost::memory-mapping ~500MB, external USB file 【发布时间】:2013-08-31 22:35:57 【问题描述】:

我正在使用以下代码打开大小约为 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++ 异常:内存中的 boost::interprocess::interprocess_exception 位置 0x0040FBD4.

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

【问题讨论】:

32位程序? 32 位窗口? 我认为这是解决方案(32 位程序)。把它作为答案,我会接受。谢谢 请注意,32 位 windows 程序只能使用 2Gb 的内存地址空间。 (并且在该地址空间中,已经映射了 .dll、代码、堆等片段,进一步减少了 32 位进程可以从中分配空间的可用内存 一条与您的问题无关的建议:使用正斜杠,如#include &lt;boost/interprocess/file_mapping.hpp&gt;;这样它在 Unix 和 Windows 中都可以工作。 【参考方案1】:

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

【讨论】:

以上是关于boost::memory-mapping 的问题 ~500MB,外部 USB 文件的主要内容,如果未能解决你的问题,请参考以下文章

计算机解决问题的三大步骤是?

分治算法——汉诺塔问题

什么是问题管理

动态规划问题之矩阵路径问题

P类问题,NP,NPC,HPHard,coNP,NPI问题 的简单认识

AndroidStdio遇到的问题怎么解决?