问题标签 [memory-mapped-files]

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 投票
4 回答
15548 浏览

c# - 内存映射文件 .NET

我有一个项目,它需要访问 ASP.NET 中的大量专有数据。这是在 Linux/PHP 上通过将数据加载到共享内存中来完成的。我想知道是否尝试使用内存映射文件是可行的方法,或者是否有更好的方法来提供更好的 .NET 支持。我正在考虑使用数据缓存,但不确定保存在缓存中的数据大小的所有缺陷。

0 投票
2 回答
557 浏览

c - 映射两个连续的页面

我正在为我的 UTF8 操作库编写一个单元测试,如果函数进入缓冲区溢出,我希望我的测试能够发生段错误。所以我想出了在内存中mmap两个相邻页面的想法,第一个是PROT_READ | PROT_WRITE,第二个是 PROT_NONE。这样,如果发生任何溢出,就可以保证段错误。这是一个例子:

问题是,当我映射第二页时,我的程序出现了段错误。这是一个重现问题的示例程序(GNU/Linux):

有趣的是,第一个 mmap() 之前的 printf() 语句会导致程序成功运行。有谁知道为什么 mmap 会出现段错误?如果使用 mmap() 无法实现我的目标,是否有人对如何测试我的代码是否存在缓冲区溢出有任何其他建议?

0 投票
3 回答
6631 浏览

windows - 文件的内存映射与 CreateFile/ReadFile

与使用 CreateFile ReadFile 组合执行相同操作相比,使用内存映射文件读取(常规大小的文件)有哪些缺点(如果有)?

0 投票
2 回答
407 浏览

.net - 在不使用大量内存的情况下显示大文件的最佳方法是什么?

许多十六进制编辑器,例如 Hex Workshop,甚至可以读取大型文件,同时保持相对较小的内存占用,但仍能保持滚动流畅。我正在寻找实现这一目标的最佳方法,因此我有几个相关的问题。

我应该只使用 FileStream 吗?
  - 它的缓冲是否基于当前的 Seek 位置?(向后滚动时通常会出现页面错误吗?)
  - 如果我为 FileStream 创建一个仅在内部使用 Seek 的包装器,我会损害 FileStream 正确缓冲的能力吗?(即,即使搜索就在附近,重复搜索也会严重影响性能吗?我可以依靠缓冲算法或磁盘调度程序来保持性能吗?)

使用内存映射 I/O 会更好吗?(我真的只希望文件最多 100MB)
  - 来自搜索/跳转/快速滚动的页面错误会产生明显的性能问题吗?

最终必须显示数据。我应该将整个文件渲染为位图并在更改时使图像的某些部分无效(让滚动控件在图像上进行自己的分页),还是应该只在滚动事件上生成当前显示区域?

所以简而言之,我是分页数据、生成的图像,还是两者都分页,还是根据需要获取/生成它们?最适合此任务的(WPF/.Net)库/API 对象是什么?

0 投票
6 回答
25046 浏览

mmap - 内存映射文件可以有多大?

什么限制了内存映射文件的大小?我知道它不能大于未分配地址空间的最大连续块,并且应该有足够的可用磁盘空间。但是还有其他限制吗?

0 投票
3 回答
2509 浏览

c++ - 使用 Windows CreateFilemapping 时出错

在我的项目中,我实现了CreateFileMapping在两个进程之间共享内存的概念。我有一个服务器进程,我在其中存储会话数据的内存地址,其中包含有关特定图像的详细信息。我有一个客户端进程,我从缓冲区中读取该地址。现在的问题是地址显示在客户端进程中,但缺少一些细节。

这是我的服务器进程代码:

这是我的客户端进程代码:

在服务器进程中,变量“test”包含所有详细信息,但在客户端“test”中缺少一些数据。

下面的服务器测试变量显示了显示变量内容的附加图像。

下面的客户端测试变量显示了显示变量内容的附加图像。

请检查差异我需要在我的客户端进程中也可见的项目数据..

0 投票
2 回答
493 浏览

memory-mapped-files - 对于太大而无法一次进行内存映射的文件,每次建议的字节数是多少?

我正在使用内存映射打开文件。这些文件显然太大(在 32 位 PC 上为 6GB),无法在之前进行映射。所以我正在考虑每次映射它的一部分并在下一个映射中调整偏移量。

每个映射是否有最佳字节数,或者有没有办法确定这样的数字?

谢谢。

0 投票
2 回答
6382 浏览

c# - 我可以获得内存映射文件的路径吗?(.NET 4.0)

我希望非 .NET 应用程序访问内存映射文件,但该应用程序不知道内存映射文件的存在,所以我需要文件路径。有可能的?

0 投票
5 回答
2011 浏览

c++ - 内存分配器

我想在 Windows 上使用 c++ 创建一个虚拟分配器,它在硬盘上的文件上分配数据,以减少分配大对象时的物理内存使用量!..我不想将系统虚拟内存与 virtualAlloc.. . 我想在磁盘上创建一个文件并使用它来分配整个对象,然后将我需要的部分或对象移动到 RAM 中。

我尝试使用内存映射文件,但遇到了一些问题:我使用映射文件分配向量元素,但是当我烘烤删除其中任何一个时,元素的地址发生了变化,我也找不到方法来仅在需要时映射对象“在我的测试中我映射了整个文件”!

任何资源或开源项目都可以提供帮助???

0 投票
2 回答
87 浏览

winapi - 按需打开自定义文件

我有一个自定义文件类型,它在部分中实现,标题显示文件中每个部分的偏移量和长度。

目前,每当我想与文件交互时,我必须预先加载和解析整个内容,或者只选择我需要的部分并仅加载它们。

我想做的是实现一种混合方法,其中每个部分都按需加载。

然而,这样做似乎有很多潜在的缺点,因为文件系统句柄打开的时间比我想要的要长,而且我会产生额外的代码复杂性。

这种事情有什么标准模式吗?看来我的选择是:

  1. 只需加载整个文件并停止抱怨循环/内存浪费
  2. 将整个文件作为原始字节加载到内存中,然后从内存缓冲区而不是磁盘满足对卸载部分的任何请求。这节省了我解析不需要的部分的成本并且需要更少的内存(因为磁盘表示比它周围的对象模型更紧凑),但仍然意味着我浪费了我永远不会加载的部分的内存。
  3. 立即加载我需要的任何部分并关闭文件,但保留文件的源位置。然后,如果请求另一个部分,请重新打开文件并加载数据。在这种情况下,如果基础文件被更改,我可能会得到奇怪的结果。
  4. 与上述相同,但保持文件句柄打开(可能允许读取共享)。
  5. 使用 Memory-Mapped IO 加载文件并打开文件的视图。

有什么想法吗