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用于此目的.
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将利用未使用的内存来缓冲文件和缓存...因此+/-缓冲区/缓存 行.