Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内存中的程序及其内存映射_C_Memory Management_Linux Kernel - Fatal编程技术网

C 内存中的程序及其内存映射

C 内存中的程序及其内存映射,c,memory-management,linux-kernel,C,Memory Management,Linux Kernel,我对内存中程序的地址空间映射感到有点困惑, 这里有一个链接 它处理程序在执行时的虚拟地址映射,内核模式标记为1GB,用户模式标记为3GB, 并提到使用页表访问内存段 Linux只在x86体系结构上使用4KB的页面文件如果我没有错的话,那么一个进程如何使用内存中3GB的映射地址空间(正如链接中给出的,每个进程都是4GB)。这对我来说有点违反直觉,或者我的理解在某些地方是错误的?我不知道我是否理解你的意思。似乎您认为处理器使用4KB页面来管理映射文件 实际上,这个4KB只是一个页面内存缓冲区。当系统

我对内存中程序的地址空间映射感到有点困惑, 这里有一个链接 它处理程序在执行时的虚拟地址映射,内核模式标记为1GB,用户模式标记为3GB, 并提到使用页表访问内存段


Linux只在x86体系结构上使用4KB的页面文件如果我没有错的话,那么一个进程如何使用内存中3GB的映射地址空间(正如链接中给出的,每个进程都是4GB)。这对我来说有点违反直觉,或者我的理解在某些地方是错误的?

我不知道我是否理解你的意思。似乎您认为处理器使用4KB页面来管理映射文件

实际上,这个4KB只是一个页面内存缓冲区。当系统试图将数据从任何文件读取到内存时,它将首先读取页面内存缓冲区中的内容,然后将缓冲区中的内容移动到真正的堆栈或堆中。此4KB页缓冲区不用于控制映射的内存地址

我认为映射地址类似于句柄。它存储在内存的一部分。当您使用此句柄获取数据时,系统将计数并将其传输到磁盘上的实际地址。然后系统将映射数据读取到页面缓冲区,最后将它们移动到内存中

有关详细信息,请查看以下链接: 这个博客还有其他几篇关于内存管理的好文章。复杂但非常好。

Linux使用4kB大小的页面。。。