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

最佳答案

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

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

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

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

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

关于linux - 将 BSS 映射到虚拟内存段 0 的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12368768/

10-13 07:25