问题标签 [file-mapping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
208 浏览

c++ - 当应用程序需要更多 RAM 时,如何允许将一段内存换出到磁盘?

我有一个大的值矩阵,占用大约 2GB 的 RAM。

我需要形成这个矩阵的副本,然后可以将原件换出到磁盘,以便稍后加载。这个矩阵的内容很重要。最初计算它很昂贵,因此您不能轻易将其丢弃并重新创建它。将矩阵放到磁盘上,然后从磁盘重新加载它比从头开始重新计算要快。

有没有比我所拥有的更简单或更好的方法来指定一段内存暂时放在磁盘上直到下一次访问,即:

当不需要资源(2GB 矩阵)时

  • 打开一个文件
  • 将文件写入磁盘
  • 释放内存

当需要资源时

  • 打开文件
  • 读入矩阵
  • 从磁盘中删除文件

我遇到了文件映射但我不确定这是正确的使用方法

0 投票
1 回答
1249 浏览

c++ - MapViewOfFile 和 VirtualLock

下面的代码是否会将数据从文件加载到系统内存中,以便对结果指针的访问永远不会阻塞线程?

编辑:

达蒙斯回答后更新。

0 投票
1 回答
984 浏览

c++ - 在 VC++ 和 Qt 应用程序之间使用共享内存进行通信

我正在使用 FileMapping 在 C++ windows 窗体应用程序中实现共享内存概念,并在 Qt 应用程序中实现 QSharedMemory。

我想在使用 QsharedMemory 的 Qt 应用程序中使用 FileMapping 技术读取由 C++ 表单应用程序编写的数据。

可能吗?如果不是,请建议适当的方法来实现此功能。

0 投票
3 回答
726 浏览

c++ - 如何发送矢量> 通过 MapViewOfFile

我在父进程中有以下代码:

在一个子进程中,我试图接收这个向量>,但我的子进程每次都会终止。

当我尝试使用matrix子进程中的数据时发生错误。小结构如下:

如何在孩子身上正确接收我的载体?

0 投票
2 回答
1030 浏览

linux - linux - 映射文件的非线性部分

我有一个场景,我需要在进程空间中线性映射文件的非线性部分。

例如,如果文件是10页,我可能需要映射前3页,跳过4页,最后3页。映射应该是线性的,进程空间中的st增量访问允许在第3页之后转到文件的第8页,作为页4、5、6 和 7 未映射。

我想知道这在 Linux 中是否可行。

谢谢。

0 投票
1 回答
2050 浏览

c - 在 Windows 上执行映射文件

各位开发者您好,

我正在尝试在 Windows 上映射一个可执行的二进制文件,然后执行映射的文件。

到目前为止,我使用CreateFileMapping和管理映射MapViewOfFile。这些函数给了我一个映射文件的句柄和一个指向映射数据的指针,但我不知道如何执行映射的二进制文件。我想我应该使用这个CreateProcess函数,但它应该作为参数给出什么?

0 投票
1 回答
1562 浏览

windows - 尝试从用户模式进程创建全局文件映射对象失败

我有一个无需提升即可运行的 Windows 应用程序。我需要为要在应用程序的所有运行实例之间共享的内存数组创建一个文件映射对象(请注意,其中一些实例可能在不同的登录会话中运行。)

我使用全局名称调用CreateFileMapping API 来创建它,即Global\sharedname,使用提供all访问权限everyone但该 API 失败并出现错误代码 5 或ERROR_ACCESS_DENIED.

然后我开始阅读文档,发现我的进程需要SeCreateGlobalPrivilege特权。但是当我尝试分配该权限时,AdjustTokenPrivileges返回错误代码ERROR_NOT_ALL_ASSIGNED,我被卡住了......

那么这里的诀窍是什么,那个该死的MS要我们怎么做???

PS。我以前可以毫无问题地创建一个具有相同all access for everyone安全描述符和名称的全局命名互斥锁(用于同步访问共享内存) 。Global\sharedmutex

0 投票
2 回答
1847 浏览

winapi - 重叠的 IO 或文件映射?

在 Windows 应用程序中,我有一个包含文件名和缓冲区的类。您使用文件名构造它,您可以查询对象以查看缓冲区是否已填充,如果没有则返回 nullptr,如果是则返回缓冲区地址。当对象超出范围时,释放缓冲区:

我想将数据异步放入内存,据我所知,我有两个选择:要么创建缓冲区并通过 ReadFileEx 使用重叠 IO,要么使用 MapViewOfFile 并在另一个线程上触摸地址。

目前我正在使用 ReadFileEx 这会出现一些问题,因为大于约 16MB 的请求很容易失败:我可以尝试拆分请求,但随后会出现同步问题,并且如果对象在 IO 之前超出范围完成我有缓冲区清理问题。此外,如果类的多个实例被快速连续创建,事情会变得非常复杂。

在另一个线程上映射和触摸数据似乎要容易得多,因为我不会遇到上限问题:如果客户端现在绝对必须拥有数据,他们可以简单地取消引用地址,让操作系统担心页面错误并接受阻塞命中。

这个应用程序需要支持单核机器,所以我的问题是:另一个软件线程上的页面错误会比当前线程上的重叠 IO 更昂贵吗?他们会拖延这个过程吗?重叠的 IO 是否会以相同的方式停止进程,还是有一些我不明白的操作系统魔法?是否仍然使用重叠 IO 执行页面错误?

我已经很好地阅读了这些主题: http: //msdn.microsoft.com/en-us/library/aa365199 (v=vs.85).aspx(文件管理中的 IO 概念) http://msdn。 microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx(文件映射),但我似乎无法推断如何进行性能权衡。

0 投票
2 回答
3489 浏览

c++ - Visual C++6 MFC MapViewOfFile 返回错误代码 8

我有一个正在创建地图文件的程序,它能够很好地执行该调用m_hMap = CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL);,但是当随后的函数调用时MapViewOfFile(m_hMap,dwViewAccess,0,0,0),我得到一个错误代码 8,即 ERROR_NOT_ENOUGH_MEMORY,或错误字符串“错误存储空间不足可用于处理此命令”。

所以我并不完全理解 MapViewOfFile 为我做了什么,以及如何解决这种情况。

一些数字...

我认为我的页面大小是65536

0 投票
3 回答
2004 浏览

c++ - C++ 访问另一个类的公共成员

我有一个 COM 对象。在主要课程中,我创建了两个公共成员。

它们用于映射文件。我在 COM 对象的实例化处映射文件。

COM 对象的主类有一个私有类。从这个私有类我想访问这些公共成员:

这就是我想要访问映射文件的方式:

但是编译器不喜欢这样。它说“非静态成员引用必须相对于某个对象”。

谁能告诉我如何正确地做到这一点?我知道在主类中公开成员,但我需要这样做,因为私有类(如上所述)也有私有类,它们都需要这个成员来访问某个映射文件。


这是我映射文件的地方:

进而

m_App 是一个类。它是 COM 对象主类的私有成员。

该类有子类,例如:CTTSEngObj.m_App.SomeSmallClass

SomeSmallClass 需要访问映射的文件。