Linux/Windows中的C/C++内存使用API

min*_*ang 4 c linux winapi memory-management

我想获得每个进程和系统范围的内存使用信息.在Windows中,它非常简单.GetProcessMemoryInfo和GlobalMemoryStatusEx可以非常轻松地完成这些工作.例如,GetProcessMemoryInfo给出给定进程的"PeakWorkingSetSize".GlobalMemoryStatusEx返回系统范围的可用内存.

但是,我需要在Linux上这样做.我正在尝试找到与GetProcessMemoryInfo和GlobalMemoryStatusEx等效的Linux系统API.

我发现'getrusage'.但是,struct rusage中的max'ru_maxrss'(驻留集大小)仅为零,未实现.此外,我不知道获得系统范围的可用内存.

目前的解决方法,我正在使用"system("ps -p%my_pid -o vsz,rsz");".手动登录到文件.但是,处理数据很脏并且不方便.

我想知道一些花哨的Linux API用于此目的.

ale*_*xkr 6

你可以在libstatgrab中看到它是如何完成的.
你也可以用它(GPL)


Mr.*_*Ree 5

Linux有一个(模块化的)文件系统接口,用于从内核中获取这些数据,几乎可以被任何语言或脚本工具使用.

记忆可能很复杂.程序可执行本身,可能是mmap()'.共享库.堆栈利用率.堆利用率.驻留在RAM中的软件部分.部分换掉了.等等.


究竟什么是"PeakWorkingSetSize"?它听起来像最大驻留集大小(进程使用的最大非交换物理内存RAM).

虽然它也可能是整个过程的总虚拟内存占用量(内存和SWAPPED输出部分的总和).


Irregardless,在Linux下,你可以与strace的过程,看看它的内核级别的交互."ps"从/ proc/$ {PID}/*文件中获取数据.

我建议你cat/proc/$ {PID}/status.Vm*行非常有用.

具体来说: VmData指的是进程堆利用率. VmStk指的是进程堆栈利用率.

如果继续使用"ps",则可以考虑使用popen().


我不知道获得系统范围的可用内存.

总是/ usr/bin/free

请注意,Linux将利用未使用的内存来缓冲文件和缓存...因此+/-缓冲区/缓存 行.