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

assembly - 为什么内存区 $1020 在 M68HC12 上无法写入 staa?

我有以下asm代码:

该表设置正确,但 staa 在 1020 处没有写入任何内容。为什么?

0 投票
8 回答
17948 浏览

java - Java中排序(内存映射?)文件中的二进制搜索

我正在努力将 Perl 程序移植到 Java,并在学习过程中学习 Java。原始程序的一个核心组件是一个Perl 模块,它使用二进制搜索在 +500 GB 排序的文本文件中进行字符串前缀查找(本质上,“寻找”到文件中间的字节偏移量,回溯到最近的换行符,比较带有搜索字符串的行前缀,“寻找”到该字节偏移量的一半/两倍,重复直到找到......)

我已经尝试了几种数据库解决方案,但发现在这种大小的数据集的绝对查找速度上没有什么比这更好的了。您知道任何现有的实现此类功能的 Java 库吗?如果做不到这一点,您能否指出一些在文本文件中进行随机访问读取的惯用示例代码?

或者,我不熟悉新的(?)Java I/O 库,但它是否可以选择对 500 GB 文本文件进行内存映射(我在 64 位机器上,有可用内存)并执行二进制搜索内存映射的字节数组?我很想听听您分享有关此问题和类似问题的任何经验。

0 投票
2 回答
3626 浏览

windows - 如何在 Windows 中的进程之间传输敏感数据?

我想将用户名和密码信息从一个进程传输到 Windows 中同一服务器上运行的另一个进程。以安全方式实现此传输的最佳方法是什么?一种简单的方法是将密码复制到文件中,然后让其他进程从文件中读取,然后在读取文件后将其删除。虽然这很简单,但我担心它是否安全,因为即使它只存在很短的时间,某人仍然有可能访问该文件并且如果另一个文件也有可能被遗漏处理错误或崩溃。像套接字和命名管道这样的 IPC 似乎是解决这个问题的过度杀伤力。我更倾向于使用内存映射文件,如下面的链接中所述,该链接讨论了跨进程共享内存。这是正确的方法吗?此外,在释放/擦除之前用虚拟数据填充内存以防止 rouge 进程从该内存位置清除数据是一个好主意吗?

http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx

0 投票
4 回答
25374 浏览

java - Java 中的内存映射文件

我一直在尝试编写一些必须执行大量 I/O 的非常快速的 Java 代码。我正在使用一个返回 ByteBuffer 的内存映射文件:

我遇到的问题是 ByteBuffer .array() 方法(应该返回一个 byte[] 数组)不适用于只读文件。我想编写我的代码,以便它可以与在内存中构建的内存缓冲区和从磁盘读取的缓冲区一起使用。但我不想将我的所有缓冲区都包装成一个 ByteBuffer.wrap() 函数,因为我担心这会减慢速度。所以我一直在写所有东西的两个版本,一个需要一个 byte[],另一个需要一个 ByteBuffer。

我应该把所有东西都包起来吗?或者我应该把所有东西都写一遍?

0 投票
1 回答
7501 浏览

java - .array() 为何不适用于从映射的 FileChannels 返回的 ByteBuffers?

我正在用 Java 做内存映射 IO。FileChannel 类允许您将 ByteBuffer 映射到文件的特定部分。我正在使用只读打开的文件来执行此操作。

我遇到的问题是,当我尝试在生成的 ByteBuffer 上调用 .array() 方法时出现异常。也许那是因为 .array() 返回一个 byte[] 数组,而我真的想要一个最终的字节数组?

有没有办法解决?

0 投票
6 回答
19243 浏览

c++ - 在 C++ 中将指针转换为数组

CreateFileMapping 函数返回一个指向内存映射文件的指针,我想将该内存映射视为一个数组。

这就是我基本上想做的事情:

除了显然我不能简单地挥动手臂并声明指针现在是一个数组。

你们知道我该怎么做吗?我不想将指针指向的值复制到数组中,因为这将对大文件使用过多的内存。

非常感谢,

0 投票
4 回答
7261 浏览

macos - 在 OS X 10.5/10.6 中检索自己的进程的内存映射

在 Linux 中,查看进程内存映射的最简单方法是查看/proc/PID/maps,如下所示:

在 OSX 10.5 或 10.6 下,进程如何获取有关进程自己的内存映射的等效信息(地址范围、保护、映射文件名等)?

0 投票
1 回答
2347 浏览

linux - 如何在 Linux/HPUX (pmap) 上获取内核的内存映射

在 solaris 上,我可以在核心文件上运行 pmap 命令以获取崩溃进程的内存映射。不幸的是,HPUX 和 Linux 上可用的 pmap 命令不提供此选项。任何指示我如何在这些平台上获取这些信息?

0 投票
3 回答
4034 浏览

caching - 内存映射文件导致物理内存不足

我有 2GB RAM 并运行内存密集型应用程序并进入低可用物理内存状态并且系统没有响应用户操作,例如打开任何应用程序或菜单调用等。

如何触发或告诉系统将内存交换为页面文件并释放物理内存?我正在使用 Windows XP。

如果我在 4GB RAM 机器上运行相同的应用程序,情况并非如此,系统响应良好。在被可用物理内存阻塞后,系统会自动交换到页面文件并释放物理内存,不如 2GB 系统那么糟糕。

为了克服这个问题(在 2GB 机器上),尝试将内存映射文件用于由应用程序分配的大型数据集。在这种情况下,应用程序(进程)的虚拟内存很好,但系统缓存很高,并且与上述相同的问题是物理内存较少。

即使内存映射文件未映射到进程虚拟内存系统缓存也很高。为什么???!!!:(

任何帮助表示赞赏。谢谢。

0 投票
5 回答
1542 浏览

c - 在 C 中控制对内存映射寄存器的读写访问宽度

我正在使用基于 x86 的内核来操作 32 位内存映射寄存器。仅当 CPU 生成 32 位宽的读取和写入此寄存器时,我的硬件才能正常运行。该寄存器在 32 位地址上对齐,不能以字节粒度寻址。

我可以做些什么来保证我的 C(或 C99)编译器在所有情况下都只会生成完整的 32 位宽的读取和写入?

例如,如果我执行如下读取-修改-写入操作:

我不希望编译器对只有底部字节更改并生成 8 位宽读/写的事实变得聪明。由于 x86 上 8 位操作的机器代码通常更密集,我担心不需要的优化。通常禁用优化不是一种选择。

----- 编辑 -------
一篇有趣且非常相关的论文:http ://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf