将malloc的虚拟地址转换为用户空间的物理地址

标签 c

我有 IPCORE,它需要物理地址来与 RAM 通信。 我知道当我在用户空间中执行 MALLOC 时,它会分配内存部分。 现在我需要知道的是这个分配的内存的地址。这样我就可以将它分配给IPCORE并让它对其执行操作。

我希望有某种方法可以在用户空间中做到这一点。 我不擅长内核空间的驱动程序。

谢谢

最佳答案

用户空间程序的工作方式就像是在计算机上运行的单个程序一样。程序自私地占据了所有的整个地址空间,而不区分虚拟内存和物理内存。虚拟内存完全由内核管理,对程序透明。如果您没有用于与内核交互的特殊 API,您将永远无法知道您是在虚拟化环境中还是在裸机上运行。

所以答案取决于您使用的操作系统。

此外,如果没有特殊的机制,通常无法通过共享内存在内核和用户空间之间进行通信。这可能很危险,因为在应用程序运行时,VM 页面可能会移动到物理内存中的另一个位置,甚至可能会从物理内存移出到磁盘(交换或页面文件)。因此,也许您需要为您的任务寻找更合适的方法,或者至少锁定共享内存页。

关于将malloc的虚拟地址转换为用户空间的物理地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821423/

相关文章:

c - EPIPE错误没有出现?

c - 我的删除有问题

c - openssl中 `aes.h`函数的实现

c - C中栈的数据结构

c - 如何通过静态分析检测大量C代码中的内存泄漏(不使用任何工具)

c - 知道为什么 x 变为 0 然后为 nan

c - 什么时候汇编比 C 快?

小写字母转大写字母报错: Getting just ( in the result

c - strncpy 和 memcpy 之间的区别?

c - 来自加速度计的数据