问题标签 [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 回答
1361 浏览

c++ - CreateFileMapping 错误代码 8

CreateFileMapping 错误代码 8.没有足够的存储空间来处理此命令。我试图在 64 位 Win10 Visual C++ 上创建具有 4 Gb (0xFFFFFFFF) 的文件映射。

我该如何解决这个“错误 8”问题?

0 投票
4 回答
4401 浏览

c++ - 来自映射文件的 IO 与使用文件流的 IO

我正在开发一个需要处理大量数据(以 GB 为单位)的应用程序。我在任何时候都不需要一次所有的数据。可以对数据进行分段并仅在任何给定实例的某个部分上工作(从而将其带入内存)。

我读过大多数需要处理大量数据的应用程序,通常是通过使用内存映射文件来实现的。进一步阅读内存映射文件,我发现从内存映射文件读取/写入数据比普通文件 IO 更快,因为我们最终使用高度优化的页面文件算法来执行读写。

以下是我的疑问:

  1. 使用内存映射文件(我计划使用 boost::file_mapping 并且我正在使用 Windows)进行文件 IO 与使用文件流有何不同?
  2. 与使用文件流(在传统硬盘 7200 rpm 上)相比,在内存映射文件的情况下,我期望数据读取/写入速度能快多少?
  3. 内存映射文件是处理如此大量数据的唯一方法吗?有没有更好的方法来做到这一点(考虑到我的用例)?
0 投票
1 回答
2062 浏览

c - C Windows API - 在 UnmapViewOfFile 之前关闭文件句柄

我想知道这个代码片段是否:

以下释放对象的顺序是有效的:

即我可以先关闭文件句柄然后再调用UnmapViewOfFile吗?

我知道CloseHandle(mapping)andUnmapViewOfFile(contents)的执行顺序无关紧要,但是关闭文件句柄呢?

我问是因为我只想将map_view指针用于析构函数。在我看来,这可行,并且文件一直保存到UnmapViewOfFile被调用,但这可能会导致一些奇怪的行为?

0 投票
0 回答
65 浏览

c++ - 内存在 2 个进程之间映射一些数据 - C++

所以我有一个第一个进程(process1.cpp),它获取系统中当前进程的列表,并将它们与它们的 PID 和 PPID 一起写入共享内存中:

我这样写:

然后,在第二个进程(process2.cpp)中,我想读取该数组。问题是我得到“无法读取内存”错误或空值。

在此处输入图像描述

这是我在第二个过程中进行读取的方式:

有什么解决办法吗?

PS:我发布了尽可能少的代码,以免页面加载过多。如果需要,我会发布更多。

0 投票
0 回答
289 浏览

debugging - 编写 windows 调试器,Read/WriteProcessMemory vs 文件映射

我想知道调试器读取被调试对象内存的“正确”方式是什么。由于调试器提供了查看和更改被调试对象内存的能力,因此用户可以修改代码。代码段经常被调试器读取以产生反汇编,我们也应该能够检测到跳转到指令中间并再次反汇编。

虽然似乎适合读取ReadProcessMemoryWriteProcessMemory写入数据,但我认为对代码使用文件映射会更容易,因此调试器将能够像在自己的地址空间中一样处理代码。此外,我们需要在反汇编输出中插入导入/导出的函数名称,为此我们需要遍历图像导入/导出目录(此处文件映射更方便)。

不过有一个问题。MapViewOfFileEx(..., ImageBase)将失败,因为 ImageBase 由 Windows 使用(它是SEC_IMAGE加载程序创建的未命名部分的开始)。我们可以选择使用MapViewOfFile和复制映像,但是,如果可执行文件很大(例如 100Mb Nvidia 驱动程序),它将从一些堆中抢走调试对象。

然后我们这样做:

请注意,当我们创建调试对象进程时,我们会在没有调试标志的情况下将其创建为挂起状态(否则我们将无法运行 LoadLibrary 线程来执行文件映射)。在我们创建或打开调试对象进程并执行映射后,我们附加调试器(如果我们创建了调试对象进程,我们还需要在其主线程上调用 ResumeThread)。

我以前从未写过调试器。所以我的问题是我们是否应该使用文件映射或ReadProcessMemory/WriteProcessMemory(用于数据、代码、导入、导出等)?我的方法是合理的还是胡说八道?谢谢。

0 投票
0 回答
155 浏览

delphi - 如何防止我的应用程序中同一模块的多个实例?

我有下面的代码,我的问题与foo()功能有关。

问题是,当foo()在每次执行之间有间隔的无限循环中执行时,会加载我的应用程序中已经存在的相同 dll ( FileName ) 的副本。

例如:gdi32.dll

那么,如何在我的应用程序中防止同一个 dll 的多个实例?

谢谢你。

这是foo()功能:

使用单位:

PeImage.pas

HSFileMapper.pas

0 投票
2 回答
335 浏览

c++ - 在 C++ 中,结构中的 std::list 如何分配内存,并且在文件映射中使用它时,列表结果为空

面临的问题:使用文件映射共享的列表不提供列表内的任何数据...

我有一个进程 1,在其中我将所有数据存储为 hash_map 列表,然后我尝试使用文件映射来共享它......在 Process2 中,当我尝试检索列表中的数据时,在列表中找不到数据..

PS:我的exe与dll捆绑在一起,我将我的dll作为process1和exe作为process2 ...

这是我的代码,

过程1

TCHAR szName[]=TEXT("Local\MyFileMappingObject");

过程2:

0 投票
1 回答
876 浏览

windows - 在 Windows 上的不同会话中使用文件映射

我使用 CreateFileMapping 和 MapViewOfFile 将文件用作两个进程之间的共享存储。

进程A,它在会话0中作为服务运行,以清除文件映射中的内容。

进程B,它是会话1中运行的正常进程,读取和写入文件映射中的内容。

首先使用进程B,有一些数据被存储到文件映射中并终止。然后,运行进程 A 以清除数据。在我的预期中,执行进程 A 后,文件映射将变为空。但它没有。

如果我更改进程 A 的权限,将其作为正常进程运行并在会话 1 中运行。所有这些都正常工作。

我的问题是,Windows 上不同会话之间的同名文件映射不相同?

是否有任何函数可以从会话 0 中的进程创建一个线程以在会话 1 中运行?(我在会话0的过程中尝试在create_thread之前模拟用户会话,它不起作用)

谢谢你。

0 投票
3 回答
79 浏览

python - 完全匹配 2 个字符串,但在 python 中有特定字符串的地方除外

我有一个包含某些文本的主文件 - 比方说 -

然后还有 200 个其他文本文件,其中包含以下文本 -

我需要匹配这些文件。如果文件包含的文本与主文件中的文本完全相同,则结果将为真,每个文件的 x 都不同,即主文件中的“x”可以是其他文件中的任何内容,结果将为真。我有什么想出是

这是非常低效的。有没有一种方法可以将文件与主文件进行映射并在其他文件中生成差异?

0 投票
1 回答
1655 浏览

c - mmap 成功后的总线错误

语境

  • Linux 4.4.0-57-generic #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • 法语语言环境

代码

生产

执行

数据库