问题标签 [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 投票
5 回答
3023 浏览

c - 是否可以使用 mmap 仅映射文件的一部分?

我有一个输入文件,其标题如下:

然后将一个结构像素 * 写入该文件,该文件将被映射。

所以,我想跳过标题并让我的 mmap 函数将 ptr 返回到该结构。我怎样才能做到这一点?lseek 也许?你能举例说明吗?

我将在这里留下部分代码:

如您所见,现在我的 ppm 图像已映射到char*数据,但我想跳过标题并仅映射到pixel*部分。

这是我的代码,建议使用 2 个指针,一个来自 mmap 的 char*,另一个等于 + 偏移量。

主要
c 函数

文件

0 投票
1 回答
169 浏览

c# - 在文档聚合中存储临时 PDF 文档的高效方法?

我必须从磁盘加载数百个各种类型的文档并生成一个巨大的聚合 PDF。

我的方法是将每个文档单独转换为 PDF,然后聚合它们。

作为此过程的一部分,我一直在将每个 PDF 文档写入独立存储。

有没有更好的方法来做到这一点?

性能是重中之重——这是客户端。

0 投票
3 回答
1183 浏览

c++ - 在共享内存中读取不同的数据类型

我想在运行 DLL 的不同进程之间共享一些内存。因此,我创建了一个内存映射文件,HANDLE hSharedFile = CreateFileMapping(...)然后LPBYTE hSharedView = MapViewOfFile(...)LPBYTE aux = hSharedView

现在我想从 aux 数组中读取 a bool、 a int、 afloat和 a 。char阅读boolchar很容易。但是我将如何阅读 a intor float?注意intorfloat可以从位置 9 开始,例如一个不能被 4 整除的位置。

我知道你可以读 achar[4]然后memcpy把它读成 a floator int。但我真的需要这个非常快。我想知道是否可以用指针做一些事情?

提前致谢

0 投票
3 回答
1899 浏览

c# - 使用 C# 将数百个文件写入磁盘的最快方法是什么?

我的程序应该将数百个文件写入磁盘,由外部资源(网络)接收每个文件都是一个简单的文档,我目前将其以 GUID 的名称存储在特定文件夹中,但创建数百个文件,写入,关闭是一个漫长的过程过程。

有没有更好的方法将这些数量的文件存储到磁盘?我已经找到了一个解决方案,但我不知道它是否是最好的。

首先,我创建了 2 个文件,其中一个类似于分配表,第二个是一个巨大的文件,用于存储我的文档的所有内容。但是从这个文件中读取将是一场噩梦。也许内存映射文件技术可以提供帮助。使用 30GB 或更多会产生问题吗?

编辑:在磁盘上存储 1000 个文本文件的最快方法是什么?(写操作频繁执行)

0 投票
1 回答
529 浏览

windows - 控制对内存映射文件的读/写(Windows)

您是否打算防止同时读取/写入由多个进程打开的文件映射内存?

例如,如果内存中的一个字符串是“hello”并且一个进程在其上写入“hi...”,我是否正确地说另一个同时读取的进程可能会得到一个像“hi.lo”这样的间歇值?

基本上我要问的是人们如何再次保护这些东西。你打算使用信号量吗?这些是否跨流程工作?

0 投票
3 回答
2167 浏览

c++ - 默认情况下,Windows 内存映射文件内容是否始终归零?

我凭经验确定,在我的系统上,默认情况下,创建为特定大小的内存映射文件总是完全归零。例如,使用调用

.. 并写入该文件的映射视图总是会产生一个完全归零的 20MB 文件,除非我写入了非零数据。

我想知道是否可以假定文件的未初始化部分为零。这种行为通常在 Windows 上得到保证吗?

0 投票
3 回答
2743 浏览

database - 简单、快速、可靠的数据库 (NoSQL)

我正在寻找一种解决方案来为我的本机代码应用程序添加持久性。它应该简单(无 SQL)、快速且最重要的是可靠。

我能想到的最好方法是使用内存映射文件。它尽可能简单和快速 - 您只需将值存储在“内存”中的纯数据数组中。但是,我认为它不是很可靠——电源故障可能会使数据库处于不一致或损坏的状态。能够以事务方式将一组内存映射文件同步到磁盘可以解决这个问题,但我认为这是不可能的。此外,除非文件系统支持快照或 COW 克隆(例如Brtfs),否则备份将意味着在复制文件时必须完全停止应用程序。

有没有人有更好的想法?

0 投票
1 回答
800 浏览

c++ - 内存映射文件 - 如何在其他进程中插入一条数据

我的文件(sample.txt)有 10 个字符。我以写模式打开文件,做了一个createfilemapping("mymapping"). 然后我通过 getchar 持有该过程。然后打开另一个执行以下操作的进程

现在我可以访问 sample.txt 的值并通过 k 更改它。但是,如何在文件中插入/附加一条另外 10 个字符。

0 投票
1 回答
462 浏览

windows - 识别内存映射文件

我正在使用 VirtualQuery 识别部分进程的虚拟内存。我确定了映射文件(MEM_MAPPED)占用的区域,但是如何确定分配在那里的文件的实际文件(文件名)?我想它与 MapView* API 系列有关,但不能完全弄清楚......

0 投票
0 回答
463 浏览

c++ - boost::interprocess::mapped_region 更改时的线程通知

当 boost::interprocess::mapped_region 中的字节使用 interprocess_condition 更改时,如何通知我。

我打开了一个文件,并正确映射了特定区域。当我轮询并打印内存时,更新已经成功。我现在希望收到有关更改的通知,而不是不断地轮询。

如何使用 interprocess_condition 通知我的线程内存已更改?