c - 在Linux(RedHat)中,C函数malloc_stats()与/proc/<pid>/stat常驻内存大小相比显示不同的值

标签 c linux malloc redhat glibc

例如
对于在Redhat Linux中运行的进程
按照/proc/{pid}/stat的常驻页面*页面大小=> 30 GB

按照malloc_stats() => 2.5 GB

知道为什么会这样吗?

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

最佳答案

malloc_stats与用户区域中malloc的实现相关。
pmap/proc/self/stat与虚拟地址空间及其在内核 Realm 的感知有关,它不仅随mmap调用的malloc发生变化,而且随mmap的其他调用(包括与动态链接程序(ld.so)相关的调用)发生变化。

阅读一个好的textbook on operating systems。另请参见https://linuxatemyram.com/proc(5)mmap(2)execve(2)malloc(3)

关于c - 在Linux(RedHat)中,C函数malloc_stats()与/proc/<pid>/stat常驻内存大小相比显示不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61520591/

相关文章:

c - 从适配器获取 DNS 服务器 IP 地址?

c - HDC 句柄对另一个进程有效吗?

c - 我如何控制 free() 函数正常工作?

c - 未分配正在释放的指针,中止陷阱 : 6

c - 在声明函数之外访问二维数组中的结构

c - C 中的线程; TCP聊天程序

计数器未正确递增

linux - 我可以在 Windows 中运行 Linux shell 脚本吗?

linux - 如何将字符串中的所有 IP 地址放入 bash 数组

linux - 鞭尾输入框取消不起作用