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;
}

上記のコードを小さなファイルに向けると、例外は発生しません。ただし、(外部 USB 上の) 数百 MB のファイルを見ると、例外が発生します。

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 に答える