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

java - 内存直接映射到字符串

我有一个文件通过“FileChannel.map()”映射到内存中。但是,在读取字符串以执行以下操作时似乎有点奇怪:

现在我从我的 C++ 背景中知道,内存映射文件作为指向内存的指针提供给用户。那么有没有一种很好的方法来跳过使用字节数组而让字符串转换直接离开映射的内存?

0 投票
2 回答
906 浏览

iphone - 在 iOS 上使用 URL 将文件保存在内存中的最佳方式是什么?

我想将一个文件保存在内存中并将其提供给与 URL 一起使用的库(想想 NSURL)。如果我可以创建一些 iOS 可以使用 file:// 或类似文件访问的内存映射文件,那就太好了。

我的后备方法是创建一个本地服务器套接字,从内存中提供文件,但如果可能的话,我想找到一种更简洁的方法。

0 投票
2 回答
1156 浏览

c++ - 如何将结构导出到文件,然后对文件进行内存映射?

我有一个我想导出到文件的结构,然后 mmap() 该文件。一个问题是该结构有一个字符串成员变量,我不确定 mmap 将如何处理它。在这种情况下,所有这些字符串的大小都相同,均为 8 个字符。我在 Windows 上工作,虽然我使用的是我在网上找到的mmap()函数,它应该复制 Linux mmap() 函数。

结构本身定义为:

是否可以为对象定义 sizeof() 的返回值?

可以映射包含结构数据的文件吗?

我必须使用什么代码将结构导出到文件,然后对其进行映射?

0 投票
3 回答
1661 浏览

c++ - 内存映射文件 std::allocator 实现冻结 WM6 设备

我有一个适用于 Windows Mobile 6.x 的 Visual Studio 2008 C++ 项目,我需要比 32MB 进程槽中可用的内存更多的内存。所以,我正在考虑使用内存映射文件。我创建了一个标准分配器实现,用CreateFileMappingMapViewOfFile替换 new/delete 。

预期用途是这样的:

使用std::allocator,我可以在该示例中获得 28197 次迭代,然后再出现std::bad_alloc异常。使用MappedFileAllocator,在设备完全冻结并且必须重新启动之前,我得到了 32371 次迭代。由于我的设备有 512MB 的 RAM,我希望能够从该循环中获得更多的迭代。

我的MappedFileAllocator实现是:

任何人都可以建议我的MappedFileAllocator实施可能出错的地方吗?

谢谢,保罗

0 投票
2 回答
2264 浏览

python - numpy.memmap 用于字符串数组?

是否可以将numpy.memmap基于磁盘的大型字符串数组映射到内存中?

我知道它可以用于浮点数等,但这个问题专门针对字符串。

我对固定长度和可变长度字符串的解决方案感兴趣。

该解决方案可以自由指定任何合理的文件格式。

0 投票
1 回答
439 浏览

memory - Windows 中的内存映射文件

我正在阅读有关共享内存的信息,而我正在阅读的操作系统书籍提供了以下生产者/消费者程序:

制片人:

消费者:

问题是它不编译。Visual C++ 2008 Express 在生产者部分给出了这个错误:

错误 C2664:“sprintf”:无法将参数 1 从“LPVOID”转换为“char *”

有什么问题?

0 投票
3 回答
331 浏览

c++ - MapViewOfFile 冻结 Windows Mobile 6 设备

我有一个适用于 Windows Mobile 6 ARMV4I 的 Visual Studio 2008 C++ 项目,我正在使用内存映射文件。不幸的是,它会导致设备锁定。我可以用这段代码演示这个问题:

在我的测试中,Windows Mobile 6 Classic Emulator 将在 65529 次迭代后冻结。这是我做错了什么还是我应该注意的平台问题?

谢谢,保罗

编辑:增加到 /STACK:1048576,4096 允许我在设备冻结之前达到 65535 次迭代。

Edit2:根据GlobalMemoryStatus故障前的数据,该设备有 70.5MB / 94.1MB 可用物理内存。

Edit3:我可以创建两个 MMF 并将它们都加载到 65500 * 256 字节。但是,它们都不能单独超过 65535 个分配。实际上,分配大小无关紧要。我可以将它切成两半,每个 128 字节,但我仍然在 >65535 次迭代中失败。

Edit4:用实际文件支持 MMF 似乎没有什么区别。> 65535 次迭代失败。

0 投票
2 回答
2769 浏览

java - 截断内存映射文件

我正在为索引文件使用内存映射 IO,但问题是如果文件大部分为空,我将无法调整文件大小。

以前的某个地方:

调整大小:

在使用 Windows 或 32 位 Linux 时,我经常遇到取消映射问题,但在 64 位 Linux 生产环境中,一切似乎都可以正常工作,但文件保持原始大小。

谁能解释为什么会发生这种情况和/或如何解决问题?

0 投票
1 回答
3546 浏览

php - PHP中的内存映射文件,php://temp和php://memory有什么区别

我需要一种在 PHP 中非常简短地将文件存储在内存中的方法,该文件正在构建中,然后立即发送到另一个 Web 服务。我看到从 PHP 5.1 开始,php://tempandphp://memory流是可用的,但两者之间似乎没有太大的区别:php://temp支持stream_select()函数和php://memory不支持函数。在这种情况下我应该使用哪一个,或者有没有更好的方法在 PHP 中执行内存映射文件?

0 投票
1 回答
474 浏览

python - 清除 numpy.memmap

给定一个使用(即只读)numpy.memmap创建的对象,有没有办法强制它从物理 RAM 中清除所有加载的页面,而不删除对象本身?mode='r'

换句话说,我希望对memmap实例的引用保持有效,但用于缓存磁盘数据的所有物理内存都未提交。memmap对数组的任何视图也必须保持有效。

我希望将其用作诊断工具,以帮助将脚本的“真实”内存需求与使用memmap.

我在 RedHat 上使用 Python 2.7。