大きなコードセグメントを処理するためのメモリマッピング

大きなコードセグメントを処理するためのメモリマッピング

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

テキストセグメントは、次の実行可能ファイルのセクションr-xに対応する2044KiBセグメントです。.text例えば size -A):

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

おすすめ記事