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

memory - windows平台上是否有内存映射api,就像linux上的mmap()一样?

有没有做内存映射的api,就像

在Linux上?

0 投票
1 回答
536 浏览

iphone - unix api -mmap() 可以在 iphone 操作系统上正常工作吗?

我需要知道“映射”虚拟内存并将二进制代码加载到其中并执行二进制代码的可行性。二进制代码(表现为共享库)可以是mach格式或者elf格式,除了苹果自己的unix二进制加载器,我们的二进制加载器会通过文件映射的方式加载到内存中。

以前有人试过吗?如果您对此有任何线索,请告诉我,我们可以进行更多讨论。顺便说一句,有谁知道如何将共享库(不是由应用程序链接)上传到 iphone 模拟器或与 iphone 应用程序一起开发的设备?

0 投票
3 回答
3352 浏览

c - 提高 MacOS X 上的 mmap/munmap 性能

在 MacOS X 机器上运行以下 C 代码(2GB 文件上的一堆 mmap 和 munmap)似乎比在 Linux 机器上慢得多。

具体来说,比较两台机器

给出以下结果

即使考虑到内存量的减少,考虑到文件只有物理内存的一半,这似乎也很不寻常。谁能指出可能会提高性能的代码更改或配置更改?

我们尝试使用读取而不是 mmap,它确实有很大的不同,但这样做需要对现有代码库进行重大更改(并且 mmap 比 linux 上的读取快得多)。

0 投票
1 回答
3197 浏览

64-bit - 在 32 位和 64 位进程之间共享内存映射文件

我的要求是在 32 位和 64 位进程之间提供一个共享内存文件。这个文件可以由任何进程创建,这取决于谁先来。- 我仍然不确定这是否可行,如果可以,以后有什么陷阱吗?- 从 google 获得的一些信息:内存映射文件 32 位应用程序只能共享映射到 32 位虚拟地址空间的内存映射文件。64 位应用程序可以在 32 位或 64 位虚拟地址空间中共享内存映射文件。要将文件映射到可在 64 位和 32 位应用程序之间共享的内存中,您的 64 位应用程序必须在调用 mmap(2) 时使用 MAP_SHARED 标志指定 MAP_ADDR32 标志。网址:http: //docs.hp.com/en/5966-9844/ch02s08.html#d0e3037

这是否意味着对于这种共享,内存映射文件应该由 64 位进程使用给定标志创建?

谢谢

0 投票
1 回答
577 浏览

c - POSIX中的内存映射文件

POSIX系统中的内存映射文件时,我们是否需要保持文件描述符打开直到我们完成了mmaped 内存块(以及close它在 we 之后munmap)还是可以(应该?)我们close文件描述符一旦mmap成功?两者似乎都适用于我的 Linux 系统。

0 投票
3 回答
520 浏览

c - POSIX 系统上的内存映射文件保持同步

为什么以下代码可以正常工作?

首先,文件保持同步(在外部编辑和保存文件会自动打印更新的内容),即使附加到。我的代码如何能够在没有段错误的情况下访问超出我映射的字节数(初始文件大小)?是因为mmap总是将长度四舍五入到系统页面大小吗?如果是这样,这种行为是否可以依赖于一般系统(我在手册页POSIX中找不到任何这样的要求)。mmap

其次,文本如何自动附加一个'0'?是因为非映射字节自动归零吗?这种行为可以依赖吗?

0 投票
1 回答
2490 浏览

linux - 是否有用于收集有关 mmap 区域的信息的 Linux API?

我知道我可以读取文件/proc/$PID/maps,但我想知道是否有 API 来获取进程内存映射。

0 投票
4 回答
1444 浏览

c++ - 从内存映射格式化文件中读取整数

我已经映射了一个大型格式化(文本)文件,每行包含一个整数,如下所示:

所以,我在第一个字节有一个指向内存的指针,在最后一个字节也有一个指向内存的指针。我正在尝试尽快将所有这些整数读入一个数组。最初,我创建了一个专门的 std::streambuf 类来使用 std::istream 从该内存中读取,但它似乎相对较慢。

您对如何有效地将“1231232\r\n123123\r\n123\r\n1231\r\n2387897...”之类的字符串解析为数组 {1231232,123123,1231,231,2387897,. ..} ?

文件中的整数数量事先是未知的。

0 投票
2 回答
1911 浏览

c - mmap/mprotect-readonly 零页是否计入已提交的内存?

我想在我的进程中为以前使用但目前不需要的内存保留虚拟地址空间。我对主机内核是 Linux 的情况感兴趣,并且它被配置为防止过度使用(它通过详细说明所有已提交的内存来实现)。

如果我只是想防止我的应用程序不再使用的数据占用物理内存或被交换到磁盘(无论哪种方式都浪费资源),我可以madvise使用不需要它的内核,或者mmap在它上面添加新的零页。但是这两种方法都不一定会减少算作已提交的内存量,然后阻止其他进程使用这些内存量。

如果我用标记为只读的新零页替换这些页面怎么办?我的意图是它们不计入已提交的内存,并且我以后可以使用mprotect它们使它们可写,并且如果使它们可写将超过已提交的内存限制,它将失败。我的理解正确吗?这行得通吗?

0 投票
2 回答
1090 浏览

linux - Apache模块中内存映射文件的过度同步

我目前正在研究一个使用大型 mmap 文件在进程之间共享数据的 Apache 模块。这是在启动时创建并在服务器关闭时删除(可以选择在稍后阶段保留它)。我已经使用 Apache APR 库实现了这一点,它运行良好,至少对于较小的文件。

然而,当内存映射文件的大小增加时(当服务器运行时仍有足够的 RAM 来缓存它),系统有时实际上会停止运行,因为看起来操作系统(在我的例子中是 Linux)消耗了很多将文件与磁盘同步的资源。有没有办法控制/减少这种同步?

由于我目前不需要将内容同步到磁盘,因此我可能应该使用共享内存段,并且会尝试使用它。然而,我仍然对控制内存映射文件同步的方法感兴趣。