C内存映射

时间:2012-05-16 10:28:03

标签: c memory memory-management virtual-address-space

我知道有两种类型的地址。虚拟和物理。打印整数变量的地址将打印其虚拟地址。是否有一个函数可以帮助打印该变量的物理内存?

虚拟内存是指硬盘上被OS视为RAM的部分吗?

2 个答案:

答案 0 :(得分:7)

不,没有这样的(便携式)功能。在实现内存保护的现代操作系统中,用户空间(与内核空间相对,即OS的一部分)不能直接访问物理地址,这是根本不允许的。所以没有什么意义。

不,虚拟内存不需要涉及硬盘,即“交换”或“分页”。一旦拥有了虚拟内存,就可以实现它,因为它为操作系统提供了干预和管理哪些页面保存在物理内存中的机会,从而可以将内存“分页”到其他存储介质。

要深入了解Linux内核如何管理内存,this blog post非常棒。

答案 1 :(得分:2)

这是一个复杂的主题。

物理内存地址指向硬件内存设备中的实际位置,无论是系统内存,显卡内存还是网卡缓冲区。

虚拟内存是呈现给用户模式进程的内存模型。系统上的大多数设备都有一些映射到它们的虚拟内存地址空间,处理器可以写入。当这些物理内存地址被赋予虚拟内存地址时,操作系统会识别出对这些地址的读/写请求需要由特定设备提供服务,并将该请求委托给它。