问题标签 [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 回答
2772 浏览

linux - 为什么数据和堆栈段是可执行的?

我刚刚注意到我的简单程序具有可执行的数据和堆栈段。我在 /proc/[pid]/maps 中看到了它,并且简单的代码确认了它。

例如:

然后

使 prog 执行 int3 指令。

用 C 编写并用 gcc 构建的程序的数据、堆栈和堆是不可执行的,那么为什么那些用汇编编写的程序的行为方式不同呢?

0 投票
3 回答
2294 浏览

c - 如何模拟内存映射 I/O

我有一些我想模拟的硬件;我想知道我是否可以在这样的低水平上做到这一点。硬件有很多寄存器,我将它们安排在一个结构中:

所以,我想支持以下语法在 Windows 和 linux 上进行硬件访问:

当执行最后一行代码时,我希望硬件模拟器“唤醒”并做一些事情。我可以在 Windows 和/或 linux 上实现这个吗?我想过以某种方式捕捉“分段错误”信号,但不确定这是否可以在 Windows 上完成,或者根本不可以。

我查看了手册页mmap;似乎它可以提供帮助,但我无法理解如何使用它。

当然,我可以通过定义类似的函数来抽象对硬件的访问WriteToMyDevice,一切都会很容易(也许),但我想知道我是否可以以这种确切的方式安排对我的硬件的访问。

0 投票
1 回答
274 浏览

assembly - 映射内存和 SSE

我在英特尔开发人员手册中找到了这一段:

来自“使用 SSE3、SSSE3、SSE4 和 AESNI 编程”章节

流式加载不得用于引用映射到具有副作用的 I/O 设备的内存地址,或者当对这些设备的读取具有破坏性时。这是因为 MOVNTDQA 本质上是投机性的。

任何人都可以澄清这个问题吗?

我问是因为我正在考虑将一些 SSE 程序集应用于 OpenGL映射缓冲区对象,但我担心那个破坏性的词。这个主题是否适用于映射内存?实际上我不知道 glMapBuffer 调用的背后是什么。

我不认为我的图形卡会被破坏(:),但这个词肯定听起来不太好。

0 投票
3 回答
3319 浏览

c++ - 使用 MapViewOfFile 有什么限制吗?

我正在尝试将内存映射文件用作:

一旦文件大小达到千兆字节,该MapViewOfFile功能将停止工作,应用程序将崩溃!使用有什么限制MapViewOfFile吗?有什么建议吗?

0 投票
1 回答
1811 浏览

visual-c++ - 如何在文件上重复调用具有不同范围的 MapViewOfFile 以写入更大的缓冲区。?

我正在使用共享内存函数,将数据写入文件。问题:当我想使用以下函数将缓冲区写入 10MB 到文件时,我只能在第一次迭代中写入,第二次迭代我无法将缓冲区下一部分写入内存。如果有任何建议,请帮助我。或以下代码中的任何错误。我只能控制这部分。我无法控制具有 CreateFileMapping 的其他部分。

我需要在“dwFileOffsetLow”或“dwFileOffsetHigh”中更改的任何内容。从第二次迭代开始,“MapViewOfFile”返回 null。在某些地方我得到了输入,因为我需要重复调​​用 MapViewOfFile 不同的范围。但是怎么打电话,有帮助吗?之前问过这个问题。供参考

WriteBuffer 函数我定义如下:

请建议我是否应该做任何更正。谢谢。

0 投票
3 回答
509 浏览

c++ - 什么是串行复制?为什么它是这样实施的?

什么是串行复制?深拷贝和浅拷贝有区别吗?

根据Duff 的 device下的 wiki 条目,它传统上实现为:

然后它记下,说

请注意,to它不会增加,因为 Duff 正在复制到单个内存映射输出寄存器。

我真的不明白这个注释。

如果to指针不递增,那么循环的意义何在?为什么那么它被实现为:

我怀疑它与串行副本的定义有关。

我们如何分配内存以to使循环有所作为?

0 投票
4 回答
29333 浏览

linux - Linux 内核中的 copy_from_user 如何在内部工作?

该功能在内部究竟是如何工作的copy_from_user()?考虑到内核确实有权访问用户内存空间这一事实,它是否使用任何缓冲区或是否完成了任何内存映射?

0 投票
1 回答
2025 浏览

c++ - 使用带有 CreateFileMapping 和 MapViewofFile 的共享内存的问题

我有两个关于使用共享内存的问题。我正在使用 CreateFileMapping 在两个进程之间创建共享内存区域。

1) 我知道我需要在 CreateFileMapping 或 OpenFileMapping 调用返回的每个句柄上调用 CloseHandle 以释放内存。我的问题是,如果使用共享内存的程序在没有调用 CloseHandle 的情况下退出,所有句柄是否都会被适当地关闭并被 Windows XP/7 释放内存?IE - 在所有使用 mem 的进程都已关闭后,是否有可能发生 mem 泄漏?

2)我使用 MapViewofFile 来获取指向内存的指针。在一个实例中,我假设共享内存将始终存在于方法的上下文中。因此,我将 MapViewOfFile 的返回值保存为指针并关闭了 mem 的句柄,我只是使用指向共享 mem 的指针(但仍锁定对它的访问)。这是安全的,还是每次访问共享内存时都应该调用 MapViewOfFile ?

谢谢,

伊恩

0 投票
3 回答
2068 浏览

gcc - 使用链接器映射的内存

如何强制链接器将我的一些变量放在内存中的特定位置。例如,我想在 0x8100000中分配整数名称。如果我没有错过,我可以使用:

然后在链接器脚本中:

我想使用类似的东西来映射一个 uC 端口。但是有些东西不匹配,我不知道我在哪里犯了错误。(我从来没有使用过链接器脚本,如果我写了一些非常愚蠢的东西,很抱歉)。

0 投票
1 回答
224 浏览

c#-4.0 - 关于 MemoryMappingFile 的问题

我正在尝试在两个进程之间进行通信。从 MSDN 文档中,我遇到了 MemoryMappingFile,我正在使用它进行通信。

谁能告诉我为什么这段代码不起作用。与磁盘文件一起使用时相同的代码可以工作。

在连续读取和写入数据时,数据似乎丢失了。我错过了什么吗?