问题标签 [mmap]

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 投票
3 回答
2632 浏览

c - Linux将虚拟内存范围映射到现有的虚拟内存范围?

在 Linux 中,有没有办法(在用户空间)将虚拟地址范围映射到支持现有虚拟地址范围的物理页面?mmap() 函数只允许映射文件或“新”物理页面。我需要能够做这样的事情:

0 投票
2 回答
225 浏览

c - 复制堆栈的一部分并使用 mmap 将其映射到当前进程

我希望我的程序执行以下操作:

  1. 打开一个新文件。
  2. 将包含当前帧指针地址的堆栈(页面对齐)部分复制到文件中。
  3. 将文件的内容映射回与堆栈的原始部分相同范围内的进程地址空间,以便进程将文件用于其堆栈的该部分而不是系统最初拥有的内存区域为堆栈分配给它。

下面是我的代码。我在调用 mmap 时遇到分段错误,特别是 mmap 使用 vsyscall 进行系统调用的地方。(我在 Ubuntu Server (x86-64) 下使用 gcc 4.4.3、glibc 2.11.1。我已经编译并运行了 64 位和 32 位配置,结果相同。

谢谢!

0 投票
5 回答
13842 浏览

c++ - 附加到内存映射文件

我不断地附加到一个股票报价文件(整数、多头、双精度等)。我用 mmap 将此文件映射到内存中。

使新附加的数据作为内存映射的一部分可用的最有效方法是什么?

我知道我可以再次打开文件(新文件描述符),然后对其进行映射以获取新数据,但这似乎效率低下。向我建议的另一种方法是将文件预先分配为 1mb 块,写入特定位置直到结束,然后将文件 ftruncate 到 +1mb。

还有其他方法吗?

Boost 对此有帮助吗?

0 投票
6 回答
5927 浏览

linux - 如何知道写时复制页面是否是实际副本?

当我使用 mmap 创建写入时复制映射(MAP_PRIVATE)时,一旦我写入特定地址,就会复制此映射的某些页面。在我的程序中的某个时刻,我想弄清楚哪些页面实际上被复制了。有一个调用,称为“mincore”,但它只报告页面是否在内存中,这与正在复制的页面不同。

有什么方法可以确定哪些页面被复制了?

0 投票
3 回答
1917 浏览

c - 进程间共享内存和pthread_barrier:如何安全?

我想要一个简单的进程间障碍解决方案。这里有一个解决方案:解决方案

但是我完全迷失了 mmap ......第一次尝试时,它失败了十分之一(段错误或死锁)。

我知道我的问题来自同步问题,但我找不到它。我找到了一个设置 mmaped 内存的示例(example),但我不确定它是否适用于 mmaped pthread_barrier。

这是我的代码的摘录:

问题:

  • 我错过了 mmap 初始化中的某些内容吗?
  • 哪些操作应该由所有进程执行,哪些应该只由一个进程执行?

新问题

管理 pthread 屏障哪个更安全?还是它们基于相同的机制?

  • shmget
  • shm_open
  • 地图
  • 另一个
0 投票
1 回答
139 浏览

python - Python C 模块中的映射 - 有什么需要注意的陷阱吗?

我正在用 C 语言编写一个 Python 模块,我打算映射较大的内存块(可能是 500 MB)。在与 Python 解释器相同的进程空间中工作有什么需要注意的吗?

0 投票
3 回答
1224 浏览

java - 指定Java内存分配池地址

使用-Xms-Xmx选项,可以设置内存分配池的初始大小和最大大小。在 Linux 和 AIX 上使用strace/truss我发现,JVM 在内部使用 (k)mmap 系统调用。address -Parameter 为 NULL,因此操作系统决定在哪个虚拟内存地址上映射内存。

是否可以指定此地址?

背景:我必须通过 Java Native Interface (JNI) 调用遗留代码,这需要映射到内存中特定位置的大量不可重定位数据(32 位地址空间中的 2 GB)。该区域与 Java 内存分配池的位置重叠。

编辑:这是实际的内存布局:

我的目标是将 Java 内存分配池从 0xb/0xc 移动到 0x3/0x4 段中,这在标准(非大)内存模型中也可用。

0 投票
2 回答
3799 浏览

python - 在 Appengine 上使用 Pygeoip - 没有名为 mmap 的模块

我正在尝试在 Python Google Appengine 上进行一些 IP 查找,如下所示:

(pygeoip 可以在这里找到:http ://code.google.com/p/pygeoip/ )

上面的代码在本地执行良好,但是当我将它推送到实时服务器时,我收到以下错误:

我在本地使用 Python 2.5,所以它应该与我认为的实时服务器相同?

Pygeoip 页面显示以下内容:

我不确定“支持的标志”到底是什么意思 - 如果 mmap 是问题,我可以使用 Pygeoip 使用内存缓存而不是 mmap 吗?我该怎么做?

谢谢!

汤姆

PS - 仍然是一个编码 n00b 所以请放轻松:)

编辑

下面概述的解决方案有效,首先使用此代码:

然后修改 pygeoip 中的init .py 文件,如下所示(警告!我刚刚注释掉了一些代码,没有做任何花哨的事情!!)

0 投票
1 回答
370 浏览

linux - 如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中, mmap() 能否保证崩溃时的数据完整性?

我需要设计一个具有数据持久性和快速重新加载的系统,它是用mmap(). 但是mmap()用于持久性的系统通常会在系统崩溃时失去数据完整性,例如单节点 MongoDB。

我拥有的是一个非常扁平的数据结构来存储:数据被分成 1024 个大小的块,块之间没有依赖关系。在服务器正常运行期间,块会被随机且大量地访问和更新。

0 投票
3 回答
1856 浏览

c++ - 通过 mmap 文件的 IPC:应该使用 atomics 和/或 volatile 吗?

我使用 mmap 文件在进程之间共享数据。

代码是这样的:

问题是:

  1. 我应该使用 volatile 限定符 ( volatile int Data) 吗?
  2. 我应该对共享数据(__sync_fetch_and_add(&(shared->Data), 1))使用原子操作吗?

供将来参考:易失性:多线程编程几乎没用