は/ proc/PID/smapsので、私はそれをテストするためにプログラムを書いた:は/ proc/PID/smaps
void sa();
int main(int argc,char *argv[])
{
int fd;
sa();
sleep(1000);
}
void sa()
{
char *pi=new char[1024*1024*10];
for(int i=0;i<4;++i) {
for(int j=0;j<1024*1024;++j){
*pi='o';
pi++;
}
}
int cnt;
for(int i=0;i<6;++i) {
for(int j=0;j<1024*1024;++j){
cnt+=*pi;
pi++;
}
}
printf("%d",cnt);
}
$cat /proc/`pidof testprogram`/smaps
08838000-0885b000 rw-p 00000000 00:00 0 [heap]
Size: 140 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b6dcd000-b77d0000 rw-p 00000000 00:00 0
Size: 10252 kB
Rss: 10252 kB
Pss: 4108 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4108 kB
Referenced: 4108 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
私はPrivate_Dirtyに等しいpssを見つけましたが、なぜ私は不思議です。
ご連絡先:smaps
の詳細な文書はありますか?プロセスの
バイナリでスマップを実行すると、なぜ多くのPSSが表示されますか?ここにバイナリロックの出力があります。0 kB 77afd000-77afe000 r -p 00007000 00:0e 20581089 /lib/ld-uClibc-0.9.33.2.so。実際にバイナリが使用するサイズを計算するために、すべてのPSSを追加する必要がありますか。このサイズはRAMに占有されているサイズと同じですか? サイズ:4キロバイトのRss:4キロバイト:PSS 4キロバイトPrivate_Dirty:4キロバイト参考:4キロバイト 匿名:4キロバイト AnonHugePages:0 kBの 77ab2000-77ad6000 R-XP 00000000 00:0E 20711467/USR/LIB/libdbus- glib-1.so.2.2.0 サイズ:144 kB Rss:112 kB Pss:12 kB –