В Linux (RedHat) функция C malloc_stats () показывает другие значения по сравнению с / proc / <pid>/ stat резидентным объемом памяти - PullRequest
2 голосов
/ 30 апреля 2020

например, для процесса, работающего в Redhat linux в соответствии с резидентными страницами / proc / {pid} / stat * размер страницы => 30 ГБ

в соответствии с malloc_stats () = > 2,5 ГБ

есть идеи, почему это происходит?

Arena 0:
system bytes     =  465162240
in use bytes     =  465037200
Arena 1:
system bytes     =    1003520
in use bytes     =     980656
Arena 2:
system bytes     =    8065024
in use bytes     =    7771728
Arena 3:
system bytes     = 2278395904
in use bytes     = 2276584320
Arena 4:
system bytes     =    1482752
in use bytes     =    1236112
Arena 5:
system bytes     =    1482752
in use bytes     =    1235440
Arena 6:
system bytes     =    1482752
in use bytes     =    1240512
Total (incl. mmap):
system bytes     = 2782,699,520
in use bytes     = 2779710544
max mmap regions =          9
max mmap bytes   =   25624576

1 Ответ

3 голосов
/ 30 апреля 2020

malloc_stats связан с реализацией malloc в пользовательской стране.

pmap или /proc/self/stat связан с виртуальным адресным пространством и его восприятием в земле ядра, которое не изменяется только с mmap, вызванным malloc, но также и с другими вызовами на mmap, включая те, которые связаны с динамическим c компоновщиком (ld.so)

Прочитайте хороший учебник по работе системы . См. Также https://linuxatemyram.com/ и pro c (5) , mmap (2) , execve (2) , Малло c (3)

...