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

c - 为什么 MapViewOfFile 为 rapidxml 返回一个不可用的指针?

正如建议的那样:我有一个大于 2 giga 的文件。我正在使用以下函数映射到内存:

我解析ptr为接受Ch*. 根据 rapidxml 的文档ptr应该是可修改的,但由于它被声明为类型char*,因此无法这样做。程序可以编译,但在运行时崩溃并出现以下错误:访问冲突。我发现在解析char*. 请问我该如何解决?

0 投票
1 回答
1110 浏览

java - Java GZip 一个对象并使用 MappedByteBuffer 对其进行序列化

我正在将一个大型 3d 数组序列化到磁盘。原始数据约为 50MB,GZiped 输出为 Kb 大小。但操作需要大约 5 秒。我想优化它的时间。我想天气会是任何最好使用映射读/写,因为我已经看到它比通常的流写入具有更好的性能。但不知道如何使用 ObjectOutputStream 和 GZIPOutputStream 以及映射写入。请建议天气是否值得使用映射读/写使用对象输出流,如果有人有这样做的经验,请发布任何示例代码。

0 投票
5 回答
16079 浏览

memory-management - 为什么 16 位地址和 12 位偏移量会导致 4KB 页面大小?

我正在阅读“现代操作系统”一书。我对“页面大小”感到困惑。

在书中,作者说,

传入的 16 位虚拟地址分为 4 位页码和 12 位偏移量。使用 4 位作为页码,我们可以有 16 个页面,使用 12 位作为偏移量,我们可以寻址一个页面内的所有 4096个字节。

为什么是 4096 字节?使用 12 位,我们可以解决一个页面内的 4096 个条目,正确。但是,一个条目是一个地址(在这种情况下,地址大小 = 16 位)。所以我认为我们可以寻址 4096(entry) * 16(bit) = 4096(entry) * 2(byte) = 8KB,但是为什么书上说我们可以寻址 4096(bytes) 呢?

提前致谢!:)

0 投票
2 回答
5681 浏览

linux - /proc/self/maps 中的“---p”权限是什么意思?

我理解 rwxps 位的含义。r-xp 用于 .text。rw-p 用于 .data/.bss/heap/stack。只有---p页面有什么用?

例如看到这个输出cat /proc/self/maps

0 投票
2 回答
360 浏览

c - 可以通过 C 宏将地址分配转换为函数参数吗?

我正在研究嵌入式代码并尝试将大量内存映射寄存器分配转换为 get()/set() 函数调用。我想知道是否有可能维护散布在整个代码中的地址分配,但更改#defines 以便它们将分配作为函数参数。

旧方式:

所需的新方式:

那么,C 宏可以实现这种情况吗?谢谢你的想法!

0 投票
1 回答
699 浏览

c++ - 为什么升级到 Centos 5.5 后 MAP_GROWSDOWN 会导致 SIGBUS 错误?

我正在将我们的一个构建中的操作系统从 Centos 5.3 32 位升级到 Centos 5.5 32 位。完成包更新后,我重新启动,检查源代码的干净副本,构建并运行单元测试。所有依赖于我们的 MemMap 基类的单元测试都开始失败。

当我们在映射内存后立即尝试设置保护页的值时,就会发生崩溃。在四处寻找之后,我能够将问题与我们使用 MAP_GROWSDOWN 标志隔离开来,没有它测试运行良好,但在设置标志时会崩溃。这些测试在构建系统运行 5.3 时运行良好,但当我们升级到 5.5 时立即开始崩溃。它们在我的开发机器上也能正常工作,它也运行 5.5,但它是真正的硬件;构建系统是 XEN VM。这是一段稳定的代码,在几个版本中都没有修改过,单元测试覆盖率超过 80%。

所以我想我的问题是为什么会这样?

0 投票
2 回答
564 浏览

c - 内存映射接口的进一步问题

我的处理内存映射设备的 c 代码仍然存在一些问题。目前,我将写入的寄存器的地址空间声明为易失性指针,并向它们写入数据,如下所示:

这或多或少都很好。但是,我希望具有与内存映射寄存器交互的特定读写功能。所以理想情况下,它看起来像这样:

老实说,我还没有尝试过,但我想知道是否有人可以告诉我这是否是正确的方法?

编辑:也许它对其他人有用,在这里我有我的功能,他们似乎工作。非常感谢您的有用评论!

非常感谢

0 投票
4 回答
1444 浏览

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

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

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

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

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

0 投票
8 回答
4285 浏览

c++ - 哪些真实平台将硬件端口映射到内存地址?

我有时会在某些平台上看到以下 C 或 C++ 代码的声明:

ptr如果碰巧存储了该端口映射到的地址,则可能导致写入硬件输入-输出端口。通常它们被称为“嵌入式平台”。

这些平台的真实例子是什么?

0 投票
1 回答
139 浏览

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

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