/proc/1/smapsファイルを見てみると、ライブラリには通常サイズが異なり、Rss/Pssなどが異なる最大4つのマップがあります。
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 1636 kB
Rss: 980 kB
Pss: 9 kB
Shared_Clean: 980 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 980 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd ex mr mw me
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 2044 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: mr mw me
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 16 kB
Rss: 16 kB
Pss: 14 kB
Shared_Clean: 0 kB
Shared_Dirty: 4 kB
Private_Clean: 12 kB
Private_Dirty: 0 kB
Referenced: 12 kB
Anonymous: 16 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd mr mw me ac
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd wr mr mw me ac
誰かが私に理由を伝えたり、記事を教えてもらえますか?
答え1
通常、ライブラリにはファイルからロードされる3種類のメモリがあります。これらはすべて:
- code - ライブラリの実際の実行可能コード
- rodata - 読み取り専用データ(定数値)。
- データ - 書き込み可能なデータ。
これらのマッピングには異なる権限があります。各マッピングの最初の行を見ると、次のようになります。
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
テーブルの2番目の列には、マッピングされた各ブロックに対する権限が含まれています。最初のブロックには権限がありますr-xp
。これはコードブロックなので、読み込んで実行できます。
2番目のブロックにはがあります---p
。そのブロックにアクセスできません。これには、プログラムを実行するために実際に必要とされないデバッグシンボルやその他のデータが含まれる場合があります。
3番目のブロックにはr--p
読み取り専用データセグメントがあります。最後のブロックにはrw-p
書き込み可能なデータセグメントがあります。
RssとPssの値が異なる理由は、単に各領域でアクセスするメモリ量が異なるためです。
/proc/[pid]/smaps
さまざまな分野が何を意味するのか気になる場合は、確認してください手順マニュアルページ。各セクションのタイトル行がその/proc/[pid]/maps
セクションに書き込まれます。