3

我从她的e 中读到“可执行文件的 BSS 段没有存储在磁盘上,内核将零页映射到 BSS 地址范围。” 有人可以提供有关这里发生的事情的详细答案吗?

4

1 回答 1

12

“可执行文件的 BSS 段未存储在磁盘上”

因为在创建新进程时,BSS 段预计会被零初始化,而仅仅在可执行文件中存储一堆零会浪费空间,因此可执行文件只是指示 BSS 段应该从哪里开始以及它应该有多大。

“并且内核将零页映射到 BSS 范围。”

当内核从可执行文件构建一个新进程时,它会为 BSS 范围创建一个映射到零页,零页是一个全零的静态(虚拟)页。该映射将设置写时复制,因此新进程第一次写入其中一个 BSS 页时,将在允许写入完成之前在另一个内存页中分配静态零页的真实副本.

这 (a) 节省了可执行文件中的空间,并且 (b) 避免实际分配可能永远不会被进程触及的 BSS 页,从而节省内存使用量,同时仍然保证每个进程中的 BSS 段看起来是零初始化的按要求。

于 2012-09-11T17:10:22.520 回答