Articles of 内存映射文件

释放内存映射的内存

我是一个内存映射一个大文件(~200GB)到一个单一的区域/视图,并顺序写入它。 每隔一段时间我执行一个boost::interprocess::mapped_region::flush(last, current, false) 。 过了一段时间,该过程耗尽整个系统内存。 据我所知,这是正常的,因为它将释放内存作为其他进程请求内存。 这在Windows 8上运行良好。但是,在Windows 7上运行它似乎没有与AJAvideo卡的驱动程序打好,它开始影响性能(丢弃IO数据包)。 有没有什么办法可以强制Windows 7将内存中的部分内容刷新到磁盘(写入数据后只有几秒钟的时间,记住我正在按顺序遍历整个文件),以便不用整个可用的系统内存?

Windows内存映射文件内容默认情况下始终归零?

我已经根据经验确定,在我的系统中,创build为特定大小的内存映射文件默认情况下始终完全归零。 例如,使用该呼叫 HANDLE hMM = CreateFileMapping (h, NULL, PAGE_READWRITE, 0, 0x01400000,//20MB NULL); ..并写入该文件的映射视图总是导致一个20MB的文件完全归零,除非我写了非零数据。 我想知道如果未初始化的文件的部分可以假设为零。 这种行为一般在Windows上保证?

C ++ MapViewOfFile失败

我正在尝试使用VS2010在Windows上存储映射文件。 我正在做一个DLL。 DLL的第一个实例很好地映射文件。 同一过程中的第二个实例 *ppvData = ::MapViewOfFile( *phMapping, FILE_MAP_READ, 0, 0, 0 ); 失败,错误“没有足够的内存可用于此命令”。 我不知道为什么会发生这种情况。 如果我映射2个不同的文件,而不是两个相同的文件,所有工作正常,所以我不相信“内存不足”的错误消息。 谢谢。 hr = MapFile(sPath, &m_hVoiceData, &m_pVoiceData,wsErr ); HRESULT CTTSEngObj::MapFile( wstring uPath, // Value that contains file path HANDLE * phMapping, // Pointer to file mapping handle void ** ppvData, // Pointer to the data wstring &uError) { HRESULT hr […]