C内存映射

C内存映射,c,memory,memory-management,virtual-address-space,C,Memory,Memory Management,Virtual Address Space,我知道有两种地址。虚拟和物理。打印整型变量的地址将打印其虚拟地址。是否有一个函数可以帮助打印该变量的物理内存 虚拟内存是指硬盘上被操作系统视为RAM的部分吗?不,没有这样的(便携)功能。在实现内存保护的现代操作系统中,用户空间(与内核空间相反,即操作系统的一部分)不能直接访问物理地址,这是不允许的。所以没有什么意义 不,虚拟内存不需要涉及硬盘,即“交换”或“分页”。一旦有了虚拟内存,您就可以实现这一点,因为它让操作系统有机会干预和管理物理内存中保留的页面,从而可以将内存“分页”到其他存储介质 要

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

虚拟内存是指硬盘上被操作系统视为RAM的部分吗?

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

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


要深入了解Linux内核如何管理内存,这真是太棒了。

这是一个复杂的主题

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


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

是和否。否将花费太多精力来解释。从维基百科开始,伙计。这个问题()是相关的,虽然它不是一个完全重复的。物理地址不能被获得,仅仅因为它不是常数,不仅仅因为它在用户模式进程中被“隐藏”。除非内存页锁定在指定的物理地址,否则它可能随时被移动到任何地方(包括HDD)。分页/交换文件是硬盘上被操作系统视为RAM的区域。还有一个问题。我们能否获得特定用户进程的页表大小?。我知道页表的大小不是恒定的。但在某个时刻,如果我愿意,有可能吗?