9

我的问题是 Linux 特定的,需要了解内核、虚拟内存、mmap、页面错误。我有带有大型静态数组的 C 程序,它将进入 bss 部分(内存,初始化为零)。程序启动时,这块内存没有物理分配,只有虚拟内存,虚拟内存的每一页都映射到特殊的零页(全零页)。当应用程序访问这个页面时,会产生pagefault并分配物理页面。

问题是:在第一次读取访问或从 bss 部分对页面的第一次写入访问时会生成这样的页面错误吗?

4

1 回答 1

8

Linux 为该内存分配一个零页(整个区域为一个零页),然后本质上会在该页上执行 COW(写入时复制)行为,因为您正在更改内容。所以你不会得到读取错误(除非页面被换出或者它是一个小的页面错误,这意味着页面在内存中但没有映射)。

所以只有写错误才会导致在零页上分配新页的错误。

于 2012-08-24T19:23:24.997 回答