用于处理大型代码段的内存映射

用于处理大型代码段的内存映射

我知道pmap一个进程显示了内存映射是如何完成的。例如,pmap 输出的第一行显示了到进程可执行文件的文本段的内存映射。假设我有一个非常大的可执行文件并且我的代码大小很大。对于小文本段(小可执行文件),pmamp 显示400000 - 401000 - 4096 B - 4 KiB映射的文本段。

(1) 如果文本段真的很大,它如何映射? (2) 它是否根据代码执行进度所需的页面动态映射?

答案1

可执行文件中运行时所需的部分按原样映射,映射覆盖每个部分的完整范围;相应的页面仅根据需要加载,但映射必须提前存在才能发生。

例如,使用 Emacs,我看到

0000000000400000     88K r---- emacs-26.3
0000000000416000   2044K r-x-- emacs-26.3
0000000000615000    372K r---- emacs-26.3
0000000000672000     32K r---- emacs-26.3
000000000067a000  36560K rw--- emacs-26.3

文本段是2044KiBr-x段,对应于.text可执行文件中的部分(如例如 size -A):

section                     size       addr
...
.text                    2049234    4324272
...

相关内容