2013-08-31 37 views
0

我使用下面的代碼要打開的是約400文件大小800MB:問題與升壓::內存映射〜500MB,外置USB文件

#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)時,我得到一個異常:

未處理的異常處0x7521C41F在ReadingFiles.exe:微軟 C++異常:升壓::進程間: :在內存 位置0x0040FBD4處的interprocess_exception。

我有2.4GB的RAM空閒 - 所以它不應該是我用盡內存?

+0

32位程序? 32位窗口? – Greenflow

+0

我認爲這是解決方案(32位程序)。把它作爲答案,我會接受。謝謝 – user997112

+0

請注意,一個32位的Windows程序只能使用2Gb的內存地址空間。 (並且在該地址空間中存在已映射的.dll,代碼,堆等等部分,進一步減少可用內存32位進程可以從 – nos

回答

0

如果你的程序被編譯爲32位程序,那麼你的內存很可能是內存不足。有點。 2.4GB免費並不一定意味着2.4GB的免費連續內存。您可能無法獲得足夠大的文件來映射文件。