C 内存中的程序及其内存映射
我对内存中程序的地址空间映射感到有点困惑, 这里有一个链接 它处理程序在执行时的虚拟地址映射,内核模式标记为1GB,用户模式标记为3GB, 并提到使用页表访问内存段C 内存中的程序及其内存映射,c,memory-management,linux-kernel,C,Memory Management,Linux Kernel,我对内存中程序的地址空间映射感到有点困惑, 这里有一个链接 它处理程序在执行时的虚拟地址映射,内核模式标记为1GB,用户模式标记为3GB, 并提到使用页表访问内存段 Linux只在x86体系结构上使用4KB的页面文件如果我没有错的话,那么一个进程如何使用内存中3GB的映射地址空间(正如链接中给出的,每个进程都是4GB)。这对我来说有点违反直觉,或者我的理解在某些地方是错误的?我不知道我是否理解你的意思。似乎您认为处理器使用4KB页面来管理映射文件 实际上,这个4KB只是一个页面内存缓冲区。当系统
Linux只在x86体系结构上使用4KB的页面文件如果我没有错的话,那么一个进程如何使用内存中3GB的映射地址空间(正如链接中给出的,每个进程都是4GB)。这对我来说有点违反直觉,或者我的理解在某些地方是错误的?我不知道我是否理解你的意思。似乎您认为处理器使用4KB页面来管理映射文件 实际上,这个4KB只是一个页面内存缓冲区。当系统试图将数据从任何文件读取到内存时,它将首先读取页面内存缓冲区中的内容,然后将缓冲区中的内容移动到真正的堆栈或堆中。此4KB页缓冲区不用于控制映射的内存地址 我认为映射地址类似于句柄。它存储在内存的一部分。当您使用此句柄获取数据时,系统将计数并将其传输到磁盘上的实际地址。然后系统将映射数据读取到页面缓冲区,最后将它们移动到内存中 有关详细信息,请查看以下链接: 这个博客还有其他几篇关于内存管理的好文章。复杂但非常好。Linux使用4kB大小的页面。。。